2017-12-14 16 views
0

私はテンソルフローバックエンドでKerasを使用してオートエンコーダーを作成しようとしています。特に、n_components(すなわち200)のサンプリングされたn_times(すなわち20000)のベクトルのデータを有する。私は時間tを訓練するとき、それを時間tとだけ比較することが重要である。それはサンプリング時間をシャッフルしているようです。私はボトルネックを解消し、ネットワークが各コンポーネントによってスケーリングされた入力の平均に似た何かを表現する代わりに、n_componentsを予測するのはかなり悪い仕事であることがわかりました。ここでボトルネックのないKerasオートエンコーダーが元のデータを返さない

はコメントアウトボトルネックと私のネットワークである:

model = keras.models.Sequential() 

# Make a 7-layer autoencoder network 
model.add(keras.layers.Dense(n_components, activation='relu', input_shape=(n_components,))) 
model.add(keras.layers.Dense(n_components, activation='relu')) 
# model.add(keras.layers.Dense(50, activation='relu')) 
# model.add(keras.layers.Dense(3, activation='relu')) 
# model.add(keras.layers.Dense(50, activation='relu')) 
model.add(keras.layers.Dense(n_components, activation='relu')) 
model.add(keras.layers.Dense(n_components, activation='relu')) 

model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy']) 

# act is a numpy matrix of size (n_components, n_times) 
model.fit(act.T, act.T, epochs=15, batch_size=100, shuffle=False) 
newact = model.predict(act.T).T 

私は第二幕の構成要素、n_times、およびmodel.fitとして渡す(act.T、act_shuffled.T)をシャッフルテストしているとmodel.fit(act.T、act.T)との違いはありません。私は何か間違っているのですか?特定の時間からどのように学習することができますか?

多くのおかげで、 アーサー

答えて

0

は、私は問題を解決してきたが、Kerasのより多くの知識のあるユーザーは、私を修正することができるかもしれないと考えています。 fitの引数batch_sizeには多くの異なる値を試しましたが、値1を試しませんでした.1に変更すると、入力データを再現するのがうまくいったのです。

シャッフルがFalseに設定されていても、バッチサイズは、オートエンコーダが無関係の入力時間に対して1つの入力時間を訓練できると信じています。

だから、私は自分のコードをammendedています

model.fit(act.T, act.T, epochs=15, batch_size=1, shuffle=False) 
関連する問題