我正在学习一个项目的Keras,为了试验,我尝试使用LSTM(我将用于项目)进行简单的机器学习,以进行简单的XOR门预测。但是,即使我改变了神经元,层,损失函数,纪元或优化器的数量,我也无法得到正确的预测。有什么我想念的Keras或这段代码吗?
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, LSTM
data = [[[0, 0]], [[0, 1]], [[1, 0]], [[1, 1]]]
output = [[1, 0], [0, 1], [0, 1], [1,0]]
model = Sequential()
model.add(LSTM(10, input_shape=(1, 2), return_sequences=True))
model.add(LSTM(10))
model.add(Dense(2))
model.compile(loss='mae', optimizer='adam')
# print(model.summary())
model.fit(np.asarray(data), np.asarray(output), epochs=50)
print(model.predict_classes(np.asarray(data)))
答案 0 :(得分:0)
您正在预测XOR输出编码为单热矢量。在这种情况下,它很像分类问题。如果您使用current = current->next;
生成分发并将损失设置为softmax
,您的网络就会开始学习:
categorical_crossentropy
此外,您需要增加纪元数,因为import numpy as np
from keras.models import Sequential
from keras.layers import Dense, LSTM
data = [[[0, 0]], [[0, 1]], [[1, 0]], [[1, 1]]]
output = [[1, 0], [0, 1], [0, 1], [1,0]]
model = Sequential()
model.add(LSTM(10, input_shape=(1, 2), return_sequences=True))
model.add(LSTM(10))
model.add(Dense(2, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
# print(model.summary())
model.fit(np.asarray(data), np.asarray(output), epochs=200)
print(model.predict_classes(np.asarray(data)))
默认值的学习率较低。