teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

解決策

2019/06/07 00:59

投稿

physics303
physics303

スコア89

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

2019/06/07 00:59

投稿

physics303
physics303

スコア89

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

やったことを書き加えた。

2019/06/04 01:32

投稿

physics303
physics303

スコア89

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

2019/06/03 08:56

投稿

physics303
physics303

スコア89

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)) \ k
82
+ rec_loss += F.mean_squared_error(x, self.decode(z)) / k
83
83
  ```
84
84
 
85
85
  と書き換え、ほかの条件は全部そのままで(他の部分は一切書き換えずに)、実験すると

1

誤字訂正

2019/06/03 07:16

投稿

physics303
physics303

スコア89

title CHANGED
File without changes
body CHANGED
@@ -76,13 +76,13 @@
76
76
 
77
77
  ### 疑問
78
78
 
79
- ところで、疑問なのですが、rec_lossは再構成誤差なので、素朴には平均二乗誤差をつかうのが素朴だと思われます。そこで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
  などの結果が得られて、学習がうまくいっていっていないようです。