文章目录

这个案例中,我们可以分成三个步骤。

  • 定义神经网络的结构和前向传播的输出结果。
  • 定义损失函数以及选择反向传播优化的算法。
  • 生成会话,并且在训练数据上进行运行反向传播优化算法。
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

# 模拟数据
x_data = np.linspace(-0.5, 0.5, 200)[:, np.newaxis]
noise = np.random.normal(0, 0.02, x_data.shape)
y_data = np.square(x_data) + noise

# 第一部分 定义神经网络的结构和前向传播的输出结果。
## 定义神经网络输入层
## 这里,包含两个 placeholder 占位符。
## 在 shape 的一个纬度上使用 None 可以方便使用不大的 batch 大小。
x = tf.placeholder(tf.float32,[None, 1])
y_ = tf.placeholder(tf.float32,[None, 1])

## 定义神经网络中间层
W1 = tf.Variable(tf.random_normal([1, 10]))
b1 = tf.Variable(tf.zeros([1, 10]))
y1 = tf.matmul(x, W1) + b1
L1 = tf.nn.tanh(y1)

## 定义神经网络输出层
W2 = tf.Variable(tf.random_normal([10, 1]))
b2 = tf.Variable(tf.zeros([1, 1]))
y2 = tf.matmul(L1, W2) + b2
y = tf.nn.tanh(y2)

# 第二部分 定义损失函数以及选择反向传播优化的算法。
## 定义损失函数和反向传播算法
loss = tf.reduce_mean(tf.square(y_ - y))
## 使用梯度下降法训练,其中学习率是0.1
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

# 第三部分 生成会话,并且在训练数据上进行运行反向传播优化算法。
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for _ in range(2000):
        sess.run(train_step, feed_dict={x:x_data, y_:y_data})
    # 获得预测值
    prediction_value = sess.run(y, feed_dict={x:x_data})
    # 画图
    plt.figure()
    plt.scatter(x_data, y_data)
    plt.plot(x_data, prediction_value, 'r-', lw=3)
    plt.show()

其中,xy_ 不是一个特定的值,而是一个占位符 placeholder,我们在 TensorFlow 运行计算时输入这个值。这个张量的形状是[None, 1]。这里的 None 表示此张量的第一个维度可以是任何长度的。

输出的结果,如图所示。

(完)

微信公众号

文章目录