热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

神经网络一(用tensorflow搭建简单的神经网络并可视化)

微信公众号关注我,更多计算机知识告诉你!1importtensorflowastf2importnumpyasnp3importmatplotlib.
微信公众号关注我,更多计算机知识告诉你!



1
import tensorflow as tf 2 import numpy as np 3 import matplotlib.pyplot as plt 4 5 #创建一个input数据,-1到1之间300个数,[:,np.newaxis]把x_data变成300维的 6 x_data=np.linspace(-1,1,300)[:,np.newaxis] 7 #添加噪点,把他变得更像真实数据 8 noise=np.random.normal(0,0.05,x_data.shape) 9 #创建一个input的数据 10 y_data=np.square(x_data)-0.5+noise

 1 #这里定义了一个添加神经层的方法
 2 def add_layer(inputs,in_size,out_size,n_layer,activation_function=None):
 3     #定义layer_name是为了在可视化中可以看到这个模块的名字,这里传入的
 4     #n_layer代表我们现在正创建第几个神经层
 5     layer_name=\'layer%s\' % n_layer
 6     #在这里是我们layer_name模块,可视化的时候我们可以看到结果
 7     with tf.name_scope(layer_name):
 8         with tf.name_scope(\'weights\'):
 9             #这里定义的weights模块中,tf.random_normal方法从正态分布中输出随机值
10             #输出形状为[in_size,out_size]的矩阵,令其为初始值,名字为W
11             Weights=tf.Variable(tf.random_normal([in_size,out_size]),name=\'W\')
12             #在这里将这个模块命名为layer_name+weights
13             #并用tf.summary.histogram输入到日志文件中
14             tf.summary.histogram(layer_name+\'/weights\',Weights)
15             
16         with tf.name_scope(\'biases\'):
17             #在这里另一个形状为[1,out_size]的矩阵为初始值
18             #矩阵的每一个元素均为初始值
19             biases=tf.Variable(tf.zeros([1,out_size])+0.1,name=\'b\')
20             tf.summary.histogram(layer_name+\'/biases\',biases)
21              
22         with tf.name_scope(\'Wx_plus_b\'):
23             #这里定义的模块为Wx_plus_b
24             #之后加上biases时是矩阵的每一行都去加biases这个数组
25             Wx_plus_b=tf.matmul(inputs,Weights)+biases
26         #在这里如果没有激活函数则直接输出
27         #若有激活函数则用激活函数,然后给模块命名
28         if activation_function is None:
29             outputs=Wx_plus_b
30         else:
31             outputs=activation_function(Wx_plus_b)
32             tf.summary.histogram(layer_name+\'/outputs\',outputs)
33         #sess=tf.Session()
34         return outputs
1 with tf.name_scope(\'inputs\'):
2     #这里用tf.placeholder定义一个参数,方便后续为其传值
3     xs=tf.placeholder(tf.float32,[None,1],name=\'x_input\')
4     ys=tf.placeholder(tf.float32,[None,1],name=\'y_input\')
1 #这里第一层输入参数inputs=xs,Weights是一个1*10的矩阵
2 #激活函数为relu
3 l1=add_layer(xs,1,10,n_layer=1,activation_function=tf.nn.relu)
4 #这里第二层输入参数inputs=l1,Weights是一个1*10的矩阵
5 #激活函数为空
6 prediction=add_layer(l1,10,1,n_layer=2,activation_function=None)
1 #这里定义了一个损失函数,
2 with tf.name_scope(\'loss\'):
3     loss=tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=[1]))
4     tf.summary.scalar(\'loss\',loss)
5 #神经网络优化器,这里使用了梯度下降法
6 #使用优化器去减少每一步的误差
7 with tf.name_scope(\'train\'):
8     train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)
1 sess=tf.Session()
2 merged= tf.summary.merge_all()
3 #这里将神经网络结构输入到一个文件中
4 writer=tf.summary.FileWriter("logs/",sess.graph)
 1 sess=tf.Session()
 2 merged= tf.summary.merge_all()
 3 #这里将神经网络结构输入到一个文件中
 4 writer=tf.summary.FileWriter("logs/",sess.graph)
 5 
 6 
 7 sess.run(tf.global_variables_initializer())
 8 for i in range(1000):
 9     #开始训练,设置迭代次数为1000次
10     #这里输入的x_data参数为一个300*1的矩阵
11     #先在l1网络层运算,将300*10的矩阵Wx_plus_b输入到激活函数Relu中,然后输出
12     #输出结果也为300*10的矩阵
13     #然后在输出层prediction
14     #输入为300*10的矩阵,Weights为10*1的矩阵
15     #相乘后为300*1的矩阵然后加上1*1的biases
16     #输出为300*91的矩阵
17     #然后与之前的y_data去做loss误差分析
18     #计算误差
19     sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
20     if i % 50==0:
21         #每迭代50次输出带日志文件,将所有日志文件都merged合并起来
22         result=sess.run(merged,feed_dict={xs:x_data,ys:y_data})
23         writer.add_summary(result,i)
24     

  博文中的图都是tensorflow自带的可视化部件tensorboard展示出来的。我们用

writer=tf.summary.FileWriter("logs/",sess.graph)

  这个语句将结构输出到文件中,打开命令行,敲上语句

  tensorboard --logdir=C:\Users\yuanninesuns\Desktop\python\logs

  将控制台输出的这个网址敲到浏览器上就能看到可视化内容。

 


推荐阅读
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • #点球小游戏fromrandomimportchoiceimporttimescore[0,0]direction[left,center,right]defkick() ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 本文详细探讨了在Android 8.0设备上使用ChinaCock的TCCBarcodeScanner进行扫码时出现的应用闪退问题,并提供了解决方案。通过调整配置文件,可以有效避免这一问题。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
author-avatar
杨兰波欣
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有