训练没有瓶颈的Keras自动编码器不会返回原始数据

时间:2017-12-14 13:26:12

标签: python neural-network keras autoencoder

我试图使用带有张量流后端的Keras制作自动编码器。特别是,我有n_components(即200)矢量的数据采样n_times(即20000)。关键是当我训练时间t时,我只将它与时间t进行比较。它似乎正在改变采样时间。我删除了瓶颈,发现网络在预测n_components方面做得非常糟糕,而是表示更像是每个组件缩放的输入的平均值。

这是我的网络瓶颈注释:

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

我测试过调整act的第二个组件n_times,并将其作为model.fit(act.T,act_shuffled.T)传递,并且看不出与model.fit(act.T,act.T)的区别。难道我做错了什么?我如何强迫它从特定时间学习?

非常感谢, 亚瑟

1 个答案:

答案 0 :(得分:0)

我相信我已经解决了这个问题,但是更多知识渊博的Keras用户可能能够纠正我。我为fit_s的参数batch_size尝试了许多不同的值,但我没有尝试使用值1.当我将其更改为1时,它在复制输入数据方面做得很好。

我相信批量大小,即使shuffle设置为False,也允许自动编码器针对不相关的输入时间训练一个输入时间。

所以,我已将我的代码修改为:

model.fit(act.T, act.T, epochs=15, batch_size=1, shuffle=False)