tensorflow从入门到搭建学习模型 | 您所在的位置:网站首页 › web的应用 › tensorflow从入门到搭建学习模型 |
0、安装tensorflow
安装方法并不困难,只需要按照tensorflow官网https://www.tensorflow.org/install/(中文显示)的指导完成就行。有各个操作系统下的安装指导。
大致分为以下步骤
1、安装python3(更推荐直接安装包括了python3基本库以及多个科学计算库"numpy、sklearn等"的Anaconda) 2、在Anaconda里面再下载安装tensorflow(34MB左右大小) 3、tensorflow分为普通版和GPU版,若有GPU则应安装GPU版。 1、从名字理解tensorflow tensor 即张量的意思,也可以理解为我们常见的矩阵,但每一个tensor是一个实例对象。矩阵里面有很多由同一个基本数据类型组成的数据元素。所以tensor可以理解为tensorflow这种学习框架最常用的一种数据类型。 flow 即流动的意思。 tensor+flow 意为矩阵形式的数据在流动,流动就会产生变化。所以tensorflow的目的就是让矩阵形式的数据经过一系列矩阵变换,得到我们想要的矩阵。 2、tensor是怎么flow的?数据在哪里流动?数据流动过程中怎么发生变化?graph 图,地图,流程图,计算图。类似现实中的黄河流域图,在图中能看到多个节点和路线。有多个地方有水流入黄河主干也有多个地方有水流出。黄河的水在经过各个节点后颜色有变化,黄河的源头在青藏高原,水很清澈,在流经兰州后变黄,然后在流经银川到陕西、山西、河南洛阳这一带水特别浑浊污染严重,最后流入海洋的水也早已经不是源头的清水。tensorflow的运行流程主要有2步,分别是构建模型和运行模型。 3.1、构建模型 在构建模型阶段,我们需要通过代码构建一个图来描述我们的模型。所谓图,可以理解为流程图,就是将数据的输入节点->中间处理节点->输出节点整个流程用代码表示出来。并为每个节点命名,以便我们可以通过名字来访问这些节点。 例如,要构建下图中的模型,那表达式就是Y=W*X+b ————W为权重矩阵,b为偏差 C=ReLU(Y) ————激活函数ReLU:yi=max(0,yi),即矩阵Y中负数全替换为0 1、构建模型 2、设计损失函数loss 反向传播:目的是通过优化函数,如梯度下降法去反向调整模型的变量——权重矩阵W和偏置b,使得loss函数取得最小值设计优化函数 训练模型:用更新的W和b再次进行训练,得到新的loss。设计循环重复进行训练,希望得到满意的loss,当然也可能模型设计的有问题得不到loss最小值。 保存和使用模型:也就是保存变量W和b的值。在用于预测时加载这个模型,就可以得到分类结果。 代码如下: import tensorflow as tf import numpy as np # 计算图,不加这一行也会提供一个默认图 myGraph = tf.get_default_graph() # 训练得到的模型保存的地址 model_path = "D:/src/ML_DL/models/model.ckpt" # 多个tensor hello = tf.constant("hello world !") X = tf.placeholder(name="input", shape=[2, 1], dtype=tf.float32) W = tf.get_variable(name="weight", shape=[2, 2], dtype=tf.float32, initializer=tf.constant_initializer([[1, 1], [1, 1]])) b = tf.get_variable(name="bias", shape=[2, 1], dtype=tf.float32, initializer=tf.constant_initializer([0, 0])) target = tf.placeholder(name="lables", shape=[2, 1], dtype=tf.float32) # 1、构建模型 Y = tf.matmul(W, X) + b # 2、损失函数,简单设计为均方误差的求和 err = 0.5*(Y - target)**2 loss = tf.reduce_sum(err) # 3、优化函数,梯度下降法去求使得loss函数有最小值的最优的W和b # 参数0.1是学习率,可以控制每次下降的速度 back_transfer = tf.train.GradientDescentOptimizer(0.1).minimize(loss) # 提供输入值x和对应的目标值 x_matrix = np.reshape([0.9, 1.1], (2, 1)) target_matrix = np.reshape([1, 1], (2, 1)) accuracy = (1-loss)*100.0 # 查看系统自动分配的tensor名字,如果自己不设定name的话 print(Y) # 开始运行计算图 sess = tf.Session() # 必须先初始化所有变量,并分配内存 sess.run(tf.global_variables_initializer()) print(sess.run(hello)) for i in range(20): print("=======第%d次训练====================" % (i+1)) print("W=\n", sess.run(W)) print("X=\n", x_matrix) print("b=\n", sess.run(b)) x_input = myGraph.get_tensor_by_name("input:0") print("Y=W*X+b=\n", sess.run(Y, feed_dict={x_input: x_matrix})) print("target=\n", target_matrix) print("err = 0.5*(Y - target)**2=\n", sess.run(err, feed_dict={X: x_matrix, target: target_matrix})) print("loss=\n", sess.run(loss, feed_dict={X: x_matrix, target: target_matrix})) acc = sess.run(accuracy, feed_dict={X: x_matrix, target: target_matrix}) print("预测准确度= %", acc) # 可以在适当的时候保存模型,并结束训练 if acc > 99.5: saver = tf.train.Saver() saver.save(sess, model_path) break # 执行反向传递,根据梯度下降法来更新变量——权重W和偏差b sess.run(back_transfer, feed_dict={X: x_matrix, target: target_matrix}) sess.close()程序运行结果: Tensor("add:0", shape=(2, 1), dtype=float32) b'hello world !' =======第1次训练==================== W= [[1. 1.] [1. 1.]] X= [[0.9] [1.1]] b= [[0.] [0.]] Y=W*X+b= [[2.] [2.]] target= [[1] [1]] err = 0.5*(Y - target)**2= [[0.5] [0.5]] loss= 1.0 预测准确度= % 0.0 =======第2次训练==================== W= [[0.91 0.89] [0.91 0.89]] X= [[0.9] [1.1]] b= [[-0.1] [-0.1]] Y=W*X+b= [[1.6980001] [1.6980001]] target= [[1] [1]] err = 0.5*(Y - target)**2= [[0.24360205] [0.24360205]] loss= 0.4872041 预测准确度= % 51.279594 =======第3次训练==================== W= [[0.84718 0.81321996] [0.84718 0.81321996]] X= [[0.9] [1.1]] b= [[-0.16980001] [-0.16980001]] Y=W*X+b= [[1.4872038] [1.4872038]] target= [[1] [1]] err = 0.5*(Y - target)**2= [[0.11868379] [0.11868379]] loss= 0.23736759 预测准确度= % 76.263245 =======第4次训练==================== W= [[0.8033317 0.7596275] [0.8033317 0.7596275]] X= [[0.9] [1.1]] b= [[-0.2185204] [-0.2185204]] Y=W*X+b= [[1.3400683] [1.3400683]] target= [[1] [1]] err = 0.5*(Y - target)**2= [[0.05782324] [0.05782324]] loss= 0.115646474 预测准确度= % 88.43535 =======第5次训练==================== W= [[0.7727255 0.72222 ] [0.7727255 0.72222 ]] X= [[0.9] [1.1]] b= [[-0.25252724] [-0.25252724]] Y=W*X+b= [[1.2373676] [1.2373676]] target= [[1] [1]] err = 0.5*(Y - target)**2= [[0.0281717] [0.0281717]] loss= 0.05634339 预测准确度= % 94.36566 =======第6次训练==================== W= [[0.75136244 0.69610953] [0.75136244 0.69610953]] X= [[0.9] [1.1]] b= [[-0.276264] [-0.276264]] Y=W*X+b= [[1.1656828] [1.1656828]] target= [[1] [1]] err = 0.5*(Y - target)**2= [[0.01372539] [0.01372539]] loss= 0.027450787 预测准确度= % 97.25492 =======第7次训练==================== W= [[0.73645097 0.6778844 ] [0.73645097 0.6778844 ]] X= [[0.9] [1.1]] b= [[-0.2928323] [-0.2928323]] Y=W*X+b= [[1.1156465] [1.1156465]] target= [[1] [1]] err = 0.5*(Y - target)**2= [[0.00668705] [0.00668705]] loss= 0.013374109 预测准确度= % 98.66259 =======第8次训练==================== W= [[0.7260428 0.6651633] [0.7260428 0.6651633]] X= [[0.9] [1.1]] b= [[-0.30439693] [-0.30439693]] Y=W*X+b= [[1.0807211] [1.0807211]] target= [[1] [1]] err = 0.5*(Y - target)**2= [[0.00325795] [0.00325795]] loss= 0.0065159025 预测准确度= % 99.34841 =======第9次训练==================== W= [[0.7187779 0.656284 ] [0.7187779 0.656284 ]] X= [[0.9] [1.1]] b= [[-0.31246904] [-0.31246904]] Y=W*X+b= [[1.0563436] [1.0563436]] target= [[1] [1]] err = 0.5*(Y - target)**2= [[0.0015873] [0.0015873]] loss= 0.0031745962 预测准确度= % 99.68254 Process finished with exit code 0 反向传播,梯度下降法优化函数推导过程上图中η为学习率,控制每次下降的速度 更详细的总结博客:https://blog.csdn.net/ztf312/article/details/72722184 |
CopyRight 2018-2019 实验室设备网 版权所有 |