在 Python 中使用 TensorFlow 的 XOR 神经网络

XOR Neural Network using TensorFlow in Python

我目前正在学习神经网络背后的理论,我想学习如何编写此类模型。因此我开始关注 TensorFlow。

我找到了一个非常有趣的应用程序,我想编写它,但我目前无法让它工作,我真的不知道为什么!

示例来自 Deep Learning, Goodfellow et al 2016 第 171 - 177 页。

import tensorflow as tf

T = 1.
F = 0.
train_in = [
    [T, T],
    [T, F],
    [F, T],
    [F, F],
]
train_out = [
    [F],
    [T],
    [T],
    [F],
]
w1 = tf.Variable(tf.random_normal([2, 2]))
b1 = tf.Variable(tf.zeros([2]))

w2 = tf.Variable(tf.random_normal([2, 1]))
b2 = tf.Variable(tf.zeros([1]))

out1 = tf.nn.relu(tf.matmul(train_in, w1) + b1)
out2 = tf.nn.relu(tf.matmul(out1, w2) + b2)

error = tf.subtract(train_out, out2)
mse = tf.reduce_mean(tf.square(error))

train = tf.train.GradientDescentOptimizer(0.01).minimize(mse)

sess = tf.Session()
tf.global_variables_initializer()

err = 1.0
target = 0.01
epoch = 0
max_epochs = 1000

while err > target and epoch < max_epochs:
    epoch += 1
    err, _ = sess.run([mse, train])

print("epoch:", epoch, "mse:", err)
print("result: ", out2)

当 运行 代码时,我在 Pycharm 中收到以下错误消息:Screenshot

为了运行初始化op,你应该这样写:

sess.run(tf.global_variables_initializer())

而不是:

tf.global_variables_initializer()

这是一个工作版本:

import tensorflow as tf

T = 1.
F = 0.
train_in = [
    [T, T],
    [T, F],
    [F, T],
    [F, F],
]
train_out = [
    [F],
    [T],
    [T],
    [F],
]
w1 = tf.Variable(tf.random_normal([2, 2]))
b1 = tf.Variable(tf.zeros([2]))

w2 = tf.Variable(tf.random_normal([2, 1]))
b2 = tf.Variable(tf.zeros([1]))

out1 = tf.nn.relu(tf.matmul(train_in, w1) + b1)
out2 = tf.nn.relu(tf.matmul(out1, w2) + b2)

error = tf.subtract(train_out, out2)
mse = tf.reduce_mean(tf.square(error))

train = tf.train.GradientDescentOptimizer(0.01).minimize(mse)

sess = tf.Session()
sess.run(tf.global_variables_initializer())

err = 1.0
target = 0.01
epoch = 0
max_epochs = 1000

while err > target and epoch < max_epochs:
    epoch += 1
    err, _ = sess.run([mse, train])

print("epoch:", epoch, "mse:", err)
print("result: ", out2)