————————————————————————————————————

写在开头:此文参照莫烦python教程(墙裂推荐!!!)

————————————————————————————————————

TensorFlow之建造第一个神经网络

1 定义添加层

  1. import tensorflow as tf
  2. def add_layer(inputs,in_size,out_size,activation_function=None):
  3. Weights = tf.Variable(tf.random_normal([in_size,out_size]))#用随机数来初始化Weights,这比全部为0要好,int_size行,out_size
  4. biases = tf.Variable(tf.zeros([1,out_size])+0.1) #1行,out_size列,均为0.1
  5. Wx_plus_b = tf.matmul(inputs,Weights) + biases #预测出来但还没激活的值
  6. if activation_function is None: #如果没有激活函数,则返回预测原值
  7. outputs = Wx_plus_b
  8. else:
  9. outputs = activation_function(Wx_plus_b) #否则,返回预测值激活之后的值
  10. return outputs

2 建立神经网络结构

  1. import numpy as np
  2. #生成数据
  3. x_data = np.linspace(-1,1,300)[:,np.newaxis] #有300行,即一个特性,300个对象
  4. noise = np.random.normal(0,0.05,x_data.shape) #加入噪音,用期望为0、方差为0.05的正态分布的随机数来建立
  5. y_data = np.square(x_data)-0.5 + noise
  6. #将输入数据和输出数据定义为placeholder
  7. xs = tf.placeholder(tf.float32,[None,1]) #1为属性数,None为随意数都行
  8. ys = tf.placeholder(tf.float32,[None,1])
  9. #第一层layer,即输入层,这里只有一个神经元
  10. #第二层layer,即隐藏层,这里定义10个神经元
  11. #第三层layer,这里为输出层,这里有一个神经元
  12. #下面增加第二层,即这里的隐藏层
  13. l1 = add_layer(xs,1,10,activation_function=tf.nn.relu)
  14. #下面定义输出层
  15. prediction = add_layer(l1,10,1,activation_function=None)
  16. #计算损失
  17. loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys -prediction),reduction_indices=[1]))#求和之后求平均
  18. #训练
  19. train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) #学习效率为0.1,学习效率一般小于1
  20. #初始所有变量
  21. init = tf.global_variables_initializer()
  22. sess = tf.Session()
  23. sess.run(init)
  24. for i in range(1000):
  25. sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
  26. if i % 50 == 0:
  27. print(sess.run(loss,feed_dict={xs:x_data,ys:y_data})) #打印误差,如果误差不断减小,则模型有不断学习
  1. 0.32276458
  2. 0.012201915
  3. 0.0066840313
  4. 0.0057683536
  5. 0.0053448635
  6. 0.0050948677
  7. 0.004914441
  8. 0.004781631
  9. 0.0046798103
  10. 0.0046042935
  11. 0.004543632
  12. 0.0044809543
  13. 0.0044029644
  14. 0.0042897784
  15. 0.004155126
  16. 0.004016761
  17. 0.0038873414
  18. 0.003766319
  19. 0.0036393174
  20. 0.0035409257

由上面结果可知,误差是越来越小的。这说明,这个网络是在不断学习的

3 结果可视化

  1. #在上面的for之前加入一些绘图的代码,如下:
  2. %matplotlib inline
  3. import matplotlib.pyplot as plt #结果可视化所用
  4. #加入绘图代码,先打印x_data和y_data
  5. fig = plt.figure()
  6. ax = fig.add_subplot(1,1,1)
  7. ax.scatter(x_data,y_data)
  8. plt.ion() #使show()后不会暂停程序
  9. #plt.show()
  10. for i in range(1000):
  11. #训练
  12. sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
  13. if i % 50 == 0:
  14. #print(sess.run(loss,feed_dict={xs:x_data,ys:y_data})) #打印误差,如果误差不断减小,则模型有不断学习
  15. try:
  16. ax.lines.remove(lines[0])
  17. except Exception:
  18. pass
  19. prediction_value = sess.run(prediction,feed_dict={xs:x_data}) #计算预测值
  20. lines = ax.plot(x_data,prediction_value,'r-',lw = 5) #绘制预测值的曲线,红色,线框为5
  21. #ax.lines.remove(lines[0]) #抹除掉第一个线段
  22. plt.pause(1) #暂停1秒

这里应该是有一条红色的线在不断拟合这些蓝点的。这里只显示了最后一条红色的线

4 加速神经网络

  • SGD:把数据分块,每次使用批量数据。虽然损失了一点精度,但速度大大加快了
  • Mmomentum:在更新W权值时加速。公式如下:

    m = b1*m - learning rate * dx;

    W += m
  • AdaGrad:在更新W权值时加速。公式如下:

    v += pow(dx,2)

    W += -Learning rate * dx /sqrt(v)
  • RMSProp:在更新W权值时加速。公式如下:

    v = b1*v + (1-b1)*pow(dx,2)

    W += -Learning rate * dx/sqrt(v)
  • Adam:在更新W权值时加速。公式如下:(又快又好)

    m = b1*m +(1-b1)*dx

    v = b2*v + (1-b2)*pow(dx,2)

    W += -Learning tate *m/sqrt(v)

5 Optimizer优化器

TensorFlow有很多优化器,可以去tensorflow的官网查询

  1. #这里列出几种优化器:
  2. tf.train.GradientDescentOptimizer #初级常用
  3. tf.train.AdadeltaOptimizer
  4. tf.train.AdagradOptimizer
  5. tf.train.MomentumOptimizer #常用
  6. tf.train.AdamOptimizer #常用
  7. tf.train.FtrlOptimizer
  8. tf.train.RMSPropOptimizer #常用

6 网络可视化工具:tensorboard

利用Tensorboard,可以很好的画出我们的网络结构。下面以上面的例子为例,实践一下。

  1. #把上面的代码copy下来先
  1. import tensorflow as tf
  2. def add_layer(inputs,in_size,out_size,activation_function=None):
  3. with tf.name_scope('layer'): #加入名字
  4. with tf.name_scope('weights'):
  5. Weights = tf.Variable(tf.random_normal([in_size,out_size]))#用随机数来初始化Weights,这比全部为0要好,int_size行,out_size
  6. with tf.name_scope('biases'):
  7. biases = tf.Variable(tf.zeros([1,out_size])+0.1) #1行,out_size列,均为0.1
  8. with tf.name_scope('Wx_plus_b'):
  9. Wx_plus_b = tf.matmul(inputs,Weights) + biases #预测出来但还没激活的值
  10. if activation_function is None: #如果没有激活函数,则返回预测原值
  11. outputs = Wx_plus_b
  12. else:
  13. outputs = activation_function(Wx_plus_b) #否则,返回预测值激活之后的值
  14. return outputs
  1. import numpy as np
  2. x_data = np.linspace(-1,1,300)[:,np.newaxis]
  3. noise = np.random.normal(0,0.05,x_data.shape)
  4. y_data = np.square(x_data)-0.5 + noise
  5. with tf.name_scope('input'):
  6. xs = tf.placeholder(tf.float32,[None,1],name='x_input') #加入名字name
  7. ys = tf.placeholder(tf.float32,[None,1],name='y_input')
  8. #第一层layer,即输入层,这里只有一个神经元
  9. #第二层layer,即隐藏层,这里定义10个神经元
  10. #第三层layer,这里为输出层,这里有一个神经元
  11. #下面增加第二层,即这里的隐藏层
  12. l1 = add_layer(xs,1,10,activation_function=tf.nn.relu)
  13. #下面定义输出层
  14. prediction = add_layer(l1,10,1,activation_function=None)
  15. #计算损失
  16. with tf.name_scope('loss'):
  17. loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys -prediction),reduction_indices=[1]),name='mean')
  18. #训练
  19. with tf.name_scope('train'):
  20. train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
  21. sess = tf.Session()
  22. writer = tf.summary.FileWriter("desktop",sess.graph)
  23. #初始所有变量
  24. init = tf.global_variables_initializer()
  25. sess.run(init)

这样桌面便出现了events.out。但我在win10下无法打开。


*点击[这儿:TensorFlow]发现更多关于TensorFlow的文章*


2 TensorFlow入门笔记之建造神经网络并将结果可视化的更多相关文章

  1. 1 TensorFlow入门笔记之基础架构

    ------------------------------------ 写在开头:此文参照莫烦python教程(墙裂推荐!!!) ---------------------------------- ...

  2. tensorflow+入门笔记︱基本张量tensor理解与tensorflow运行结构

    Gokula Krishnan Santhanam认为,大部分深度学习框架都包含以下五个核心组件: 张量(Tensor) 基于张量的各种操作 计算图(Computation Graph) 自动微分(A ...

  3. Tensorflow学习笔记03-使用神经网络做线性回归

    import tensorflow as tf import numpy as np #input就是输入数据,输入矩阵,in_size就是输入矩阵的列数(数据属性数量),out_size输出矩阵列数 ...

  4. 5 TensorFlow入门笔记之RNN实现手写数字识别

    ------------------------------------ 写在开头:此文参照莫烦python教程(墙裂推荐!!!) ---------------------------------- ...

  5. tensorflow学习笔记七----------卷积神经网络

    卷积神经网络比神经网络稍微复杂一些,因为其多了一个卷积层(convolutional layer)和池化层(pooling layer). 使用mnist数据集,n个数据,每个数据的像素为28*28* ...

  6. tensorflow入门笔记(五) name_scope和variable_scope

    一.上下文管理器(context manager) 上下文管理器是实现了上下文协议的对象,主要用于资源的获取与释放.上下文协议包括__enter__.__exit__,简单说就是,具备__enter_ ...

  7. tensorflow入门笔记(二) 滑动平均模型

    tensorflow提供的tf.train.ExponentialMovingAverage 类利用指数衰减维持变量的滑动平均. 当训练模型的时候,保持训练参数的滑动平均是非常有益的.评估时使用取平均 ...

  8. 【TensorFlow入门完全指南】神经网络篇·卷积神经网络

    加载数据集. 这里的keep_prob是dropout的一个参数.dropout是一种随机置零的策略,用来防止模型过拟合. 这里定义两层,上面是卷积层,下面是池化层. 搭建了一层卷积.一层池化.一层卷 ...

  9. tensorflow入门笔记(四) tf.summary 模块

    模块内的函数: tf.summary.audio(name, tensor, sample_rate, max_outputs=3, collections=None, family=None) 输出 ...

随机推荐

  1. session用户账号认证(一个用户登陆,踢出前一个用户)

    在web.xml中配置: <listener> <listener-class>cn.edu.hbcf.common.listener.SessionAttributeList ...

  2. ubox及日志管理

    ubox是openwrt的帮助工具箱,位于代码package/system/ubox下, CMakeLists.txt kmodloader.c log/ lsbloader.c validate/ ...

  3. 第二百一十节,jQuery EasyUI,SearchBox(搜索框)组件

    jQuery EasyUI,SearchBox(搜索框)组件 学习要点: 1.加载方式 2.属性列表 3.方法列表 本节课重点了解 EasyUI 中 SearchBox(搜索框)组件的使用方法,这个组 ...

  4. 剑指offer(13)-栈的压入、弹出序列 九度1366

    题目来自剑指offer系列 九度 1366:http://ac.jobdu.com/problem.php?pid=1367 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列 ...

  5. IOS-应用之间调用

    本文转载至 http://blog.csdn.net/likendsl/article/details/7553605 原文作者的博客值得关注. ios应用之间的调用步骤: 一.调用自己开发的应用 1 ...

  6. 认识tornado(四)

    接下来我们看一下helloword.py的唯一一个handler. 1 class MainHandler(tornado.web.RequestHandler): 2 def get(self): ...

  7. 《转》最受欢迎的ASP.NET的CMS下载

    1. Umbraco 项目地址 | 下载 Umbraco是一个开放源码的CMS内容管理系统,基于asp.net建立,使用mssql进行存储数据. 使用Umbraco ,设计师能创造出有效的XHTML标 ...

  8. IntelliJ中的main函数和System.out.println()快捷输入方式

    转自:https://blog.csdn.net/assassinsshadow/article/details/73557375 main快捷输入 psvm System.out.println() ...

  9. jquery验证手机号码

    function checkSubmitMobil() { if ($("#tel").val() == "") { alert("手机号码不能为空! ...

  10. cocos2d-X学习之主要类介绍:摄像机(CCCamera)

    在cocos2d-x中,每个节点(CCNode)都需要用到,即当节点发生旋转.缩放和位置变化等时,都需要覆盖CCCamera,然后这个节点通过CCCamera重新渲染. 类结构: 其主要函数如下: c ...