【发布时间】:2017-02-11 05:14:12
【问题描述】:
我尝试编写一个简单的 XOR 神经网络,但它永远不会收敛
我创建了一个具有 2 个输入、2 个隐藏节点和 1 个输出的 NN。
我在第一个隐藏层使用 relu,最后使用 softmax 来获取输出。
理论上它应该学习如何解决它并收敛?
import tensorflow as tf
sess = tf.InteractiveSession()
# define placeholder for input and output
x_ = tf.placeholder(tf.float32, shape=[4,2], name="x-input")
y_ = tf.placeholder(tf.float32, shape=[4,1], name="y-input")
# Configure weights and layers
W = tf.Variable(tf.random_uniform([2, 2], -.01, .01))
b = tf.Variable(tf.random_uniform([2], -.01, .01))
hidden = tf.nn.relu(tf.matmul(x_,W) + b) # first layer.
W2 = tf.Variable(tf.random_uniform([2,1], -.1, .1))
b2 = tf.Variable(tf.zeros([1]))
hidden2 = tf.matmul(hidden, W2 + b2)
y = tf.nn.softmax(hidden2)
# Training function
cross_entropy = -tf.reduce_sum(y_*tf.log(hidden2))
train_step = tf.train.GradientDescentOptimizer(0.2).minimize(cross_entropy)
XOR_X = [[0,0],[0,1],[1,0],[1,1]]
XOR_Y = [[0],[1],[1],[0]]
init = tf.global_variables_initializer()
sess.run(init)
# Train on the input data
for i in range(100):
sess.run([cross_entropy, train_step], feed_dict={x_: XOR_X, y_: XOR_Y})
print ('W1', sess.run(W))
print('Output ', sess.run(y, feed_dict={x_: XOR_X, y_: XOR_Y}))
【问题讨论】:
标签: python machine-learning tensorflow neural-network artificial-intelligence