从一个tensorflow的例子着手,开始理解一个tensorflow上的学习程序是怎么运作的
首先引入一个头文件
import tensorflow as tf
import numpy as np
numpy:NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多(该结构也可以用来表示矩阵)。利用numpy可以很容易地实现矩阵,数组的构造与操作。
#creat data
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data*0.1+0.3
numpy的random库用于生成随机数,包含了以下几种常用的函数:
- numpy.random.rand(d0, d1, ..., dn):生成一个[0,1)之间的随机浮点数或N维浮点数组。
- numpy.random.randn(d0, d1, ..., dn):生成一个浮点数或N维浮点数组,取数范围:正态分布的随机样本数。
- numpy.random.standard_normal(size=None):生产一个浮点数或N维浮点数组,取数范围:标准正态分布随机样本
- numpy.random.randint(low, high=None, size=None, dtype='l'):生成一个整数或N维整数数组,取数范围:若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数。
astype:转换数组的数据类型。这里将输出的随机数转换为32位的浮点数模式存储
同样常见的dtype:一个用于说明数组数据类型的对象。返回的是该数组的数据类型。
#create tensorflow structure start###
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)
init = tf.initialize_all_variables()
###create tensorflow structure end####
tf.Variable(initializer,name)构造函数需要变量的初始值,它制定了variable的类型和形状,initializer是初始化参数,name是可自定义的变量名称。
tf.random_uniform(),生成一个-1.0和1.0之间的形状是[1]的数组。
loss是误差方程,reduce_mean函数用于张量tensor沿着指定的数轴上的平均住,主要用作降维或计算tensor的平均值
optimizer是优化器,这里利用了tf的梯度下降优化器,优化程度是0.5,一般这个值都是小于1。
train是训练,利用刚才提到的优化器将误差方程沿着倒数下降的方向移动。使得误差最小。
init应该是对变量的生成,必须加上这句话,不然之前定义的变量则无法起作用(之后再研究好了)。ps目前tf.initialize_all_variables()已经被改成了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))
这是放在最后的固定搭配,是对程序的循环执行。
完整代码
import tensorflow as tf
import numpy as np
#creat data
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data*0.1+0.3
#create tensorflow structure start###
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)
init = tf.initialize_all_variables()
###create tensorflow structure end####
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))
这是执行输出,每20次训练输出一次对weights和biases的训练的结果,使其越来越接近我们设置的0.1和0.3