微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

神经网络在1000个周期后无法学习以解决XOR问题

如何解决神经网络在1000个周期后无法学习以解决XOR问题

我正在学习TensorFlow,并且正在尝试解决XOR问题。我创建了一个三层的神经网络来做到这一点,但是经过500或1000个时期后,它根本没有学习。我在做什么错了?

我正在colab.research.google中使用TensorFlow 2.3.0。

from tensorflow.keras.layers import Dense
from tensorflow.keras.losses import MeanSquaredError
from tensorflow.keras.optimizers import SGD
from tensorflow.keras.metrics import Accuracy
from tensorflow.keras import Sequential

import numpy as np



x = np.array([[0.,0.],[1.,1.],[0.,1.]],dtype=np.float32)

y = np.array([[0.],[0.],[1.],[1.]],dtype=np.float32)



model = Sequential()
model.add(Dense(2,activation='sigmoid'))
model.add(Dense(2,activation='sigmoid'))
model.add(Dense(1,activation='sigmoid'))
model.compile(optimizer='SGD',loss='mean_squared_error',metrics='accuracy')
model.fit(x,y,batch_size=1,epochs=1000,verbose=False)

pred = model.predict_on_batch(x)
print(pred)

解决方法

由于您提到的隐藏层单位为2,即Dense(2),对于具有2个输入的数组输入,这不足以使模型学习。 我包括16个单位,您可以尝试使用32,64个等单位。

对于神经网络中的隐藏层,最好使用激活函数ReLu。 (有关此问题的更多详细信息,请参阅Mark的评论。)
但是对于这种用例,您可以不提及任何激活功能,但是收敛到解决方案需要花费更多的时间。

下面是经过修改的代码,它以较少的时期数预测正确的输出。

import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras.losses import MeanSquaredError
from tensorflow.keras.optimizers import SGD
from tensorflow.keras.metrics import Accuracy
from tensorflow.keras import Sequential

import numpy as np



x = np.array([[0.,0.],[1.,1.],[0.,1.]],dtype=np.float32)

y = np.array([[0.],[0.],[1.],[1.]],dtype=np.float32)



model = Sequential()
model.add(Dense(16,activation='relu'))
model.add(Dense(1,activation='sigmoid'))
model.compile(optimizer='SGD',loss='mean_squared_error',metrics=['accuracy'])
model.fit(x,y,batch_size=1,epochs=500,verbose=False)

pred = model.predict(x).round()
print(pred) 

输出:

[[0.]
 [0.]
 [1.]
 [1.]]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。