tensorflow入门之tensorflow的运行结构

tensorflow采用计算图的方式构建机器学习的运行结构,图中的每个节点可以是一个操作,对象,数据等等。当构建完一个运行结构之后,把数据输入给这个运行结构,tensorflow就会自动执行整个计算图,得到相应的结果。而输入的数据则以张量的形式在计算图中不断流动,使得计算得以继续。

在构建一个机器学习运行结构时,必须包括以下几个方面:
1.训练数据集(包括输入数据和标签数据)
2.自己构建的机器学习模型(可以是神经网络,也可以是其他)
3.损失函数的定义
4.训练操作的定义(通常定义为最小化损失函数的值)
5.指定训练次数,进行训练

下面就用代码实现一个最简单的机器学习的运行结构,这个机器学习结构y’=wx+b用来逼近一个线性函数,y=0.8x+0.6,进行2000次训练后,权重w和偏置b与线性函数y的权重0.8与偏置0.6几乎相等,相差的值可以忽略不计,下面是实现的代码:

# -*- coding: utf-8 -*-
"""
Created on Thu Apr  6 10:43:17 2017

@author: zhangshaoxing
"""
import tensorflow as tf
import numpy as np
learningrate=0.05 #定义学习率
train_steps=2000 #训练2000次
#构建输入的训练数据
xdata=np.random.rand(100).astype(np.float32)
ydata=xdata*0.8+0.6
#构建输入的训练数据

#构建预测上面的线性函数的简单机器学习运行结构
#构建用来模拟线性函数的机器学习模型,整个结构也是由权重和偏置组成,用来逼近之前的线性函数
weights=tf.Variable(tf.random_uniform([1],-1,2))
bias=tf.Variable(tf.random_uniform([1],-1,1))
y_predict=weights*xdata+bias
#构建用来模拟线性函数的机器学习模型
#构建预测上面的线性函数的简单机器学习运行结构
#定义损失函数
loss=tf.reduce_mean(tf.square(ydata-y_predict))
#定义损失函数
#定义训练操作,训练操作就是最小化损失函数
train=tf.train.GradientDescentOptimizer(learningrate).minimize(loss)
#定义训练操作
init=tf.global_variables_initializer()
#初始化要用到的变量
with tf.Session() as sess:
    sess.run(init) #初始化变量
    print('步数\t权重\t偏置\t损失')
    for step in range(train_steps):
         sess.run(train)
         if  step%100==0:  #每训练一百次打印一次损失函数的值
             print(step,sess.run(weights),sess.run(bias),sess.run(loss))

运行结果:

步数      权重      偏置      损失
0 [ 1.6093986] [ 0.17346789] 0.058906
100 [ 1.19829583] [ 0.36930075] 0.0144877
200 [ 1.00054038] [ 0.48384374] 0.00367276
300 [ 0.90097147] [ 0.54151571] 0.000931079
400 [ 0.85083884] [ 0.57055336] 0.000236037
500 [ 0.82559717] [ 0.58517373] 5.98374e-05
600 [ 0.81288797] [ 0.59253502] 1.51691e-05
700 [ 0.80648899] [ 0.59624141] 3.84546e-06
800 [ 0.80326718] [ 0.5981077] 9.74827e-07
900 [ 0.80164498] [ 0.59904724] 2.47115e-07
1000 [ 0.80082822] [ 0.59952033] 6.26447e-08
1100 [ 0.80041707] [ 0.59975845] 1.58869e-08
1200 [ 0.80021006] [ 0.59987831] 4.03049e-09
1300 [ 0.80010605] [ 0.59993851] 1.02811e-09
1400 [ 0.80005383] [ 0.59996891] 2.64383e-10
1500 [ 0.80002767] [ 0.59998417] 6.96296e-11
1600 [ 0.80001414] [ 0.59999168] 1.84905e-11
1700 [ 0.80000746] [ 0.59999567] 5.12447e-12
1800 [ 0.8000049] [ 0.5999971] 2.21252e-12
1900 [ 0.8000049] [ 0.5999971] 2.21252e-12

为了让整个神经网络的结构能够可视化,使用tf.name_scope(‘name’)函数,把相应的代码块包括在内,那么这一部分的代码块就可以以name的名字出现在可视化的计算图中了,不同部分之间的连接由tensorflow的tensorboard自己完成。
代码如下:

# -*- coding: utf-8 -*-
"""
Created on Thu Apr  6 10:43:17 2017

@author: zhangshaoxing
"""
import tensorflow as tf
import numpy as np
learningrate=0.05 #定义学习率
train_steps=2000 #训练2000次
#构建输入的训练数据
with tf.name_scope('inputs'):
 xdata=np.random.rand(100).astype(np.float32)
ydata=xdata*0.8+0.6
#构建输入的训练数据

#构建预测上面的线性函数的简单机器学习运行结构
#构建用来模拟线性函数的机器学习模型,整个结构也是由权重和偏置组成,用来逼近之前的线性函数
with tf.name_scope('weights'):    
 weights=tf.Variable(tf.random_uniform([1],-1,2))
with tf.name_scope('bias'):
 bias=tf.Variable(tf.random_uniform([1],-1,1))
with tf.name_scope('outputs'):
 y_predict=weights*xdata+bias
#构建用来模拟线性函数的机器学习模型
#构建预测上面的线性函数的简单机器学习运行结构
#定义损失函数
with tf.name_scope('loss'):
 loss=tf.reduce_mean(tf.square(ydata-y_predict))
#定义损失函数
#定义训练操作,训练操作就是最小化损失函数
with tf.name_scope('train'):
 train=tf.train.GradientDescentOptimizer(learningrate).minimize(loss)
#定义训练操作
init=tf.global_variables_initializer()
#初始化要用到的变量
with tf.Session() as sess:
    sess.run(init) #初始化变量
    writer=tf.summary.FileWriter("C:\\Users\\zhangshaoxing\\Desktop\\h\\",sess.graph)
    print('步数\t权重\t偏置\t损失')
    for step in range(train_steps):
         sess.run(train)
         if  step%100==0:  #每训练一百次打印一次损失函数的值
             print(step,sess.run(weights),sess.run(bias),sess.run(loss))

这样在桌面的h文件夹下就生成了一个可视化的文件。

您的赞助将是我不断创作的最大动力,谢谢支持!!!
如果您觉得我的文章对您有帮助,可以通过以下方式进行赞赏:
tensorflow入门之tensorflow的运行结构_第1张图片

你可能感兴趣的:(机器学习)