这是今天我们要做的结果,下面按步骤训练模型的结果也就是我们设计神经网络学习如何找到一条直线(线性方法)的学习过程,下面是每隔 20 次输出一下线性方法参数(Weight 和 biases)
0 [-0.3485145] [0.7979202]
20 [-0.06059515] [0.39019653]
40 [0.05340868] [0.32616752]
60 [0.08648308] [0.30759165]
80 [0.09607853] [0.30220246]
100 [0.09886231] [0.30063897]
120 [0.09966995] [0.30018538]
140 [0.09990425] [0.3000538]
160 [0.09997222] [0.30001563]
180 [0.09999195] [0.30000454]
200 [0.09999767] [0.30000132]
推测直线整个过程分阶段抽取神经网络学习的成果,也就是让神经网络去找到一条直线(y = 0.1x + 0.3)从输出的 200 行的值 [0.09999767] [0.30000132] ,可以看出结果就已经非常接近我们想要得到的。
引入依赖
其中 numpy 是很好数学的 python 模块我会同步介绍 numpy 的使用方法
from __future__ import print_function
import tensorflow as tf
import numpy as np
创建模拟数据
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data*0.1 + 0.3
首先生成随机数列,类型给 float32 这是 TensorFlow 喜欢这种类型,大部分数据类型都是 float32.
然后就是定义我们想要直线方程,从而模拟出用于神经网络学习的数据
定义结构(重点)
我们知道 TensorFlow 是需要我们定义神经网络的结果来让其学习,所以结算结果是和定义结构好坏息息相关的。我们要推测就是 y = 0.1x + 0.3 中的 0.1(Weight) 和 0.1(biases)。
Weights = tf.Variable(tf.random_uniform([1],-1.0,1.0))
biases = tf.Variable(tf.zeros([1]))
y = Weights*x_data + biases
loss = tf.reduce_mean(tf.square(y-y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
- Weights 定义 weight 取值的矩阵,因为只有一个 weight 所以一维矩阵,用 Variable 定义变量,给出取值范围-1.0 - 1.0
- biases 的初始值给 0
然后 TensorFlow 通过给定值一步一步提升初始值来进行学习。
然后定义 y 为 Weights*x_data + biases 为我们要来计算 Weight 和 biases
通过 loss 来计算我们预测和结果的差异,开始这个值可能会很大,随后通过优化器 optimizer 来进行优化来减少 loss,TensorFlow 提供很多种优化器这里选择简单 GradientDescentOptimizer ,0.5 为学习效率,通常是小于 1 的数值。
初始化结构进行计算
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
from __future__ import print_function
import tensorflow as tf
import numpy as np
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data*0.1 + 0.3
Weights = tf.Variable(tf.random_uniform([1],-1.0,1.0))
biases = tf.Variable(tf.zeros([1]))
y = Weights*x_data + biases
loss = tf.reduce_mean(tf.square(y-y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)