使用2层神经网络解决XOR问题

2019-10-10  本文已影响0人  _龙雀

感知机,逻辑回归,或者说单层神经网络只能解决线性可分的问题,比如AND和OR问题,图中的直线是决策边界。


image.png

对于XOR问题,由于线性不可分,我们希望生成非线性的决策边界,如图

image.png

我们可以通过组合多个线性可分的决策边界,来实现这一目的


image.png

在神经网络中,这个操作就是增加隐藏层


image.png

相当于将原始的输入通过隐藏层之后,转化为了一个更有效的表达


image.png

使用keras简单实现一下吧

import numpy as np
from keras.models import Sequential
from keras.layers.core import Dense

# the four different states of the XOR gate
training_data = np.array([[0,0],[0,1],[1,0],[1,1]], "float32")

# the four expected results in the same order
target_data = np.array([[0],[1],[1],[0]], "float32")

model = Sequential()
model.add(Dense(2, input_dim=2, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='mean_squared_error',
             optimizer='adam',
             metrics=['binary_accuracy'])

model.fit(training_data, target_data, nb_epoch=500, verbose=2)

print model.predict(training_data).round()

提供一个纯numpy实现:https://github.com/omar-florez/scratch_mlp
中文翻译:https://zhuanlan.zhihu.com/p/74631214

上一篇 下一篇

猜你喜欢

热点阅读