在 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)
我目前正在学习神经网络背后的理论,我想学习如何编写此类模型。因此我开始关注 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)