質問編集履歴
5
解決策
title
CHANGED
File without changes
|
body
CHANGED
@@ -103,4 +103,16 @@
|
|
103
103
|
|
104
104
|
### 追記3
|
105
105
|
|
106
|
-
optimizerの問題ではないかとの指摘を受けて、Adam,AdaDelta,SGDで試しましたが結果は変わらず…
|
106
|
+
optimizerの問題ではないかとの指摘を受けて、Adam,AdaDelta,SGDで試しましたが結果は変わらず…
|
107
|
+
|
108
|
+
### 解決策?
|
109
|
+
|
110
|
+
passerbyさんに言われた通り、
|
111
|
+
```python3
|
112
|
+
rec_loss += F.mean_squared_error(x, self.decode(z)) / k
|
113
|
+
```
|
114
|
+
を
|
115
|
+
```python3
|
116
|
+
rec_loss += F.mean(F.sum((x - self.decode(z)) ** 2, axis=1))
|
117
|
+
```
|
118
|
+
に変えるとうまくいきます。でもなぜだ…?
|
4
k
title
CHANGED
File without changes
|
body
CHANGED
@@ -89,8 +89,18 @@
|
|
89
89
|
|
90
90
|
これはなぜでしょうか。
|
91
91
|
|
92
|
-
### 追記
|
92
|
+
### 追記1
|
93
93
|
|
94
94
|
bernoulli_nllはデフォルトではすべて合計する一方で、mean_squared_errorは二乗誤差をバッチとピクセルの両方で平均するので、再構成項が過小評価されてしまっているかもしれないと考えました。
|
95
95
|
|
96
|
-
MNSITは28×28の画像なので、MSEを用いる際には28×28×F.mean_squared_error(x, decode(z))とすれば良いと思い、試してみましたが結果は変わりませんでした。
|
96
|
+
MNSITは28×28の画像なので、MSEを用いる際には28×28×F.mean_squared_error(x, decode(z))とすれば良いと思い、試してみましたが結果は変わりませんでした。
|
97
|
+
|
98
|
+
### 追記2
|
99
|
+
|
100
|
+
chainerでMSEを使ったVAEの実装を行っているコードを見つけました。
|
101
|
+
(https://github.com/maguro27/VAE-CIFAR10_chainer/blob/master/VAE_CIFAR10.ipynb)
|
102
|
+
なぜ、このコードでは動いて、私の上のコードでは学習がうまくいかないのでしょうか。
|
103
|
+
|
104
|
+
### 追記3
|
105
|
+
|
106
|
+
optimizerの問題ではないかとの指摘を受けて、Adam,AdaDelta,SGDで試しましたが結果は変わらず…
|
3
やったことを書き加えた。
title
CHANGED
File without changes
|
body
CHANGED
@@ -87,4 +87,10 @@
|
|
87
87
|
2. 再構成が行われない。適当なinputを与えても、意味のないoutput画像が得られる。(ちなみにinput画像の種類によらずoutput画像は一定のようです)
|
88
88
|
などの結果が得られて、学習がうまくいっていっていないようです。
|
89
89
|
|
90
|
-
これはなぜでしょうか。
|
90
|
+
これはなぜでしょうか。
|
91
|
+
|
92
|
+
### 追記
|
93
|
+
|
94
|
+
bernoulli_nllはデフォルトではすべて合計する一方で、mean_squared_errorは二乗誤差をバッチとピクセルの両方で平均するので、再構成項が過小評価されてしまっているかもしれないと考えました。
|
95
|
+
|
96
|
+
MNSITは28×28の画像なので、MSEを用いる際には28×28×F.mean_squared_error(x, decode(z))とすれば良いと思い、試してみましたが結果は変わりませんでした。
|
2
k
title
CHANGED
File without changes
|
body
CHANGED
@@ -79,7 +79,7 @@
|
|
79
79
|
ところで、疑問なのですが、rec_lossは再構成誤差なので、素朴には平均二乗誤差をつかうのが自然だと思われます。そこでrec_lossの部分を
|
80
80
|
|
81
81
|
```python3
|
82
|
-
rec_loss += F.mean_squared_error(x, self.decode(z))
|
82
|
+
rec_loss += F.mean_squared_error(x, self.decode(z)) / k
|
83
83
|
```
|
84
84
|
|
85
85
|
と書き換え、ほかの条件は全部そのままで(他の部分は一切書き換えずに)、実験すると
|
1
誤字訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -76,13 +76,13 @@
|
|
76
76
|
|
77
77
|
### 疑問
|
78
78
|
|
79
|
-
ところで、疑問なのですが、rec_lossは再構成誤差なので、素朴には平均二乗誤差をつかうのが
|
79
|
+
ところで、疑問なのですが、rec_lossは再構成誤差なので、素朴には平均二乗誤差をつかうのが自然だと思われます。そこでrec_lossの部分を
|
80
80
|
|
81
81
|
```python3
|
82
82
|
rec_loss += F.mean_squared_error(x, self.decode(z)) \ k
|
83
83
|
```
|
84
84
|
|
85
|
-
と書き換え
|
85
|
+
と書き換え、ほかの条件は全部そのままで(他の部分は一切書き換えずに)、実験すると
|
86
86
|
1. rec_lossが2epoch目以降、全く減少しない。
|
87
87
|
2. 再構成が行われない。適当なinputを与えても、意味のないoutput画像が得られる。(ちなみにinput画像の種類によらずoutput画像は一定のようです)
|
88
88
|
などの結果が得られて、学習がうまくいっていっていないようです。
|