python - Keras LSTM XOR 门
问题描述
我正在为一个项目学习 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)))
解决方案
您正在预测编码为 one-hot 向量的 XOR 输出。在这种情况下,它很像分类问题。如果您使用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)))
此外,您还需要增加 epoch 的数量,因为adam
默认值的学习率很小。
推荐阅读
- python - 我如何制作一个 cron.yaml 文件来为谷歌云应用引擎每小时运行一次 python 脚本
- flutter - Quickblox Flutter SDK 示例 WebRTC 未连接
- python - 就地修改和非就地修改之间的区别是一些实现细节还是Python程序员需要知道的东西?
- javascript - 如何创建多维 PRNG?
- java - 如何更改这个泛型类,以便 main 方法可以工作?
- java - 尝试使用 Platform.runlater() 从另一个类更新 JavaFX 时出现空指针异常
- javascript - 如何验证登录页面的 websql 数据库中是否存在用户名和密码?
- javascript - 如何在 Javascript 中按名称删除兑现 - pwa
- flutter - 如何比较 Dart 中“is”运算符中的类型变量
- angular - 使用动态创建具有多个段的 SVG 圆
和