X_train
[[0 1 1 1 1 0 0 0 0 0]
[0 1 1 1 1 0 0 0 0 0]
[0 1 1 1 0 0 0 0 0 0]
[0 1 0 0 0 1 1 0 0 0]
[0 1 0 0 0 1 1 0 0 0]
[0 1 1 1 1 0 0 0 0 0]]
y_train
1
1
1
0
0
1
X_train中的第三和第四列是输出的明确指标。我正在尝试使用LSTM进行RNN,所以我选择了这个样本数据,我想过度使用它。
即使在 50 训练时期之后,准确性也没有任何变化 -
Epoch 1/60
6/6 [==============================] - 1s - loss: 5.3141 - acc: 0.6667
Epoch 2/60
6/6 [==============================] - 1s - loss: 5.3141 - acc: 0.6667
Epoch 3/60
6/6 [==============================] - 1s - loss: 5.3141 - acc: 0.6667
Epoch 4/60
6/6 [==============================] - 1s - loss: 5.3141 - acc: 0.6667
Epoch 5/60
6/6 [==============================] - 1s - loss: 5.3141 - acc: 0.6667
模型
model = Sequential()
model.add(Embedding(MAX_NB_WORDS, embedding_vecor_length, input_length=max_length,batch_input_shape=( batch_size, input_dim)))
model.add(LSTM(10, return_sequences=False))
model.add(Dense(1, activation='softmax'))
参数
MAX_NB_WORDS = 10
embedding_vecor_length = 32
max_length = 10
batch_size = 2
input_dim = max_length
我正在使用Theano后端。可能缺少的东西非常明显。请帮忙!
更新
道歉,提供半烤的东西。我正在编写模型 -
opt = SGD(lr=0.001)
model.compile(loss='binary_crossentropy', optimizer=opt, metrics=['accuracy'])
print(model.summary())
print np.shape(X_train)
callbacks = [
# EarlyStopping(monitor='val_loss', patience=3, verbose=2),
RemoteMonitor(root='http://localhost:9000'),
ModelCheckpoint(filepath="/tmp/weights.hdf5", monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto')
]
print X_train
print y_train
history = model.fit(X_train, y_train, nb_epoch=60, batch_size=batch_size, callbacks=callbacks) #, validation_data=(X_val, y_val)
UPDATE2
通过更改> softmax'的激活功能来纠正此问题。到了'sigmoid' 缺少正确的解释。我想"为什么"应该是答案而不是如何。
答案 0 :(得分:0)
在训练模型之前,您需要配置学习过程,这是使用'compile'方法完成的 - model.compile()
然后,为了训练你的模型,你将不得不使用'fit'方法 - model.fit()
请阅读以下内容:
https://keras.io/getting-started/sequential-model-guide/
在你添加了更多信息后,我已经进行了一些测试。首先,我向X_train和y_train 添加了一行X_train =
[[0, 1, 1, 1, 1, 0, 0, 0, 0, 0,],
[0, 1, 1, 1, 1, 0, 0, 0, 0, 0,],
[0, 1, 1, 1, 0, 0, 0, 0, 0, 0,],
[0, 1, 0, 0, 0, 1, 1, 0, 0, 0],
[0, 1, 0, 0, 0, 1, 1, 0, 0, 0],
[0, 1, 1, 1, 1, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 0, 0, 0, 0, 0]]
y_train = [[1],[1],[1],[0],[0],[1],[1]]
还将batch_size更改为1。
结果并不令人意外:
Epoch 59/60
1/7 [===>..........................] - ETA: 0s - loss: 1.1921e-07 - acc: 1.0000
2/7 [=======>......................] - ETA: 0s - loss: 7.9712 - acc: 0.5000
3/7 [===========>..................] - ETA: 0s - loss: 5.3141 - acc: 0.6667
4/7 [================>.............] - ETA: 0s - loss: 3.9856 - acc: 0.7500
5/7 [====================>.........] - ETA: 0s - loss: 3.1885 - acc: 0.8000
6/7 [========================>.....] - ETA: 0s - loss: 5.3141 - acc: 0.6667
7/7 [==============================] - 0s - loss: 4.5550 - acc: 0.7143
在每个时代中,7/7步骤总是相同的acc:0.7143但其他(1/7,2/7等等)是相当随机的。我的回答是:
您没有足够的数据来训练模型。在这个数据集上,netowork倾向于在这几个步骤中找到最佳解决方案,结果总是相同的。在这种情况下,结果将永远不值得。我可能错了,但尝试用数百/数千个数据进行测试