我试图使用带有张量流后端的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)的区别。难道我做错了什么?我如何强迫它从特定时间学习?
非常感谢, 亚瑟
答案 0 :(得分:0)
我相信我已经解决了这个问题,但是更多知识渊博的Keras用户可能能够纠正我。我为fit_s的参数batch_size尝试了许多不同的值,但我没有尝试使用值1.当我将其更改为1时,它在复制输入数据方面做得很好。
我相信批量大小,即使shuffle设置为False,也允许自动编码器针对不相关的输入时间训练一个输入时间。
所以,我已将我的代码修改为:
model.fit(act.T, act.T, epochs=15, batch_size=1, shuffle=False)