用 TensorFlow 训练线性模型拟合一条直线的例子

这个案例,重在通过分析代码入门 TensorFlow

文章目录

一、代码分析

  1. 创建数据
import tensorflow as tf
import numpy as np
# 创建 100 个 float32 类型的小数,作为训练数据
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data * 0.1 + 0.3

这里使用 numpy 来创建我们的数据
这里可以把 y_data = x_data * 0.1 + 0.3 想象成 y_data = x * Weights + biases
然后神经网络通过训练,学着将 Weights 变成 0.1 ,biases 变成 0.3

  1. 搭建模型
# 由于0.1是1维,所以这里指定 Weights 是一维,初始值为 -1 到 1 的范围
Weights = tf.Variable(tf.random_uniform([1],-1.0,1.0)) 
# biases初始值 设为 0
biases = tf.Variable(tf.zeros([1])) 
y = Weights*x_data + biases
  1. 计算误差,使用 均方误差函数
loss = tf.reduce_mean(tf.square(y - y_data))
# 误差的传递方法,采用梯度下降法,指定 learning rate 为 0.5 
optimizer = tf.train.GradientDescentOptimizer(0.5)
# 使用 optimizer 来传递反向误差,通过不断训练,不断降低反向误差的值
train = optimizer.minimize(loss)
  1. 初始化 神经网络的结构
init = tf.global_variables_initializer()

建立了神经网络后,还没有使用这个结构,使用之前,必须先初始化所有之前定义的 Variable

5.创建会话 Session

sess = tf.Session()
sess.run(init) # 至关重要

这里我先创建 Session ,然后使用 Session 来执行 init 初始化步骤

  1. 通过训练数据,提高神经网络的预测准确性
for step in range(201):
    sess.run(train)
    if step % 20 ==0:
        print(step,sess.run(Weights),sess.run(biases))

二、完整代码

import tensorflow as tf
import numpy as np

# create data

x_data = np.random.rand(100).astype(np.float32)
y_data = x_data * 0.1 + 0.3

# create tensorflow structure start
# tf.random_uniform 随机均匀分布
Weights = tf.Variable(tf.random_uniform([1],-1.0,1.0)) # 1维,初始值是 -1 到 1 的范围
biases = tf.Variable(tf.zeros([1])) # 初始值是0

y = Weights*x_data + biases

loss = tf.reduce_mean(tf.square(y - y_data))

optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

init = tf.global_variables_initializer()

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

for step in range(201):
    sess.run(train)
    if step % 20 ==0:
        print(step,sess.run(Weights),sess.run(biases))

运行结果:
用 TensorFlow 训练线性模型拟合一条直线的例子

上一篇:【tensorflow】在 Ubuntu/Linux 环境下安装TF遇到的问题 [Errno 13] Permission denied


下一篇:tf.control_dependencies