【发布时间】:2017-02-01 10:34:01
【问题描述】:
我正在尝试预测输入向量中每个数字的类别。有3个班。 1 类,如果输入值从 0 变为 1。2 类,如果它从 1 变为 0。否则 0 类。
在第二个 epoch 和之后的精度停留在 0.8824。更多的训练时期不会改变任何事情。我尝试将LSTM 切换为GRU 或SimpleRNN,这没有任何改变。我还尝试生成更长的输入向量和多个批次,但没有成功。
唯一有帮助的是将 LSTM 层的大小增加到 128,在包括 LSTM 的每一层之后添加三个 TimeDistributedDense(128, relu) 层和 BatchNormalization。但是对于这样一个简单的问题,它看起来有点矫枉过正,而且无论如何都没有给出完美的结果。
我花了一天多的时间试图让它发挥作用。可能是什么问题? 谢谢!
# complete code for training
from keras.models import Sequential
from keras.layers import Dense, LSTM, TimeDistributed
from keras.utils.np_utils import to_categorical
import numpy as np
np.random.seed(1337)
X = np.array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0])
Y = np.array([0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0])
Y_cat = to_categorical(Y, 3).reshape((1, len(X), 3))
X_r = X.reshape((1, len(X), 1))
model = Sequential()
model.add(LSTM(32, input_dim=1, return_sequences=True))
model.add(LSTM(32, return_sequences=True))
model.add(LSTM(32, return_sequences=True))
model.add(TimeDistributed(Dense(3, activation='softmax')))
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(X_r, Y_cat, nb_epoch=10)
model.predict_classes(X_r) # will print array filled with zeros
【问题讨论】:
标签: python machine-learning neural-network keras recurrent-neural-network