热门标签 | 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的鸢尾花数据集神经网络模型深度解析
    基于TensorFlow的鸢尾花数据集神经网络模型深度解析 ... [详细]
  • PHP 5.5.31 和 PHP 5.6.17 安全更新发布
    PHP 5.5.31 和 PHP 5.6.17 已正式发布,主要包含多个安全修复。强烈建议所有用户尽快升级至最新版本以确保系统安全。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 重要知识点有:函数参数默许值、盈余参数、扩大运算符、new.target属性、块级函数、箭头函数以及尾挪用优化《深切明白ES6》笔记目次函数的默许参数在ES5中,我们给函数传参数, ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 稀疏数组是一种用于存储和处理大部分元素为零或相同值的数组的技术。通过记录非零元素的位置和值,稀疏数组可以显著减少存储空间和提高处理效率。 ... [详细]
  • 本文详细介绍了如何在PHP中记录和管理行为日志,包括ThinkPHP框架中的日志记录方法、日志的用途、实现原理以及相关配置。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本地存储组件实现对IE低版本浏览器的兼容性支持 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文以 www.域名.com 为例,详细介绍如何为每个注册用户提供独立的二级域名,如 abc.域名.com。实现这一功能的核心步骤包括:首先,确保域名支持泛解析,即将 A 记录设置为 *.域名.com,以便将所有二级域名请求指向同一服务器。接着,在服务器端使用 ASP.NET 2.0 进行配置,通过解析 HTTP 请求中的主机头信息,动态识别并处理不同的二级域名,从而实现个性化内容展示。此外,还需在数据库中维护用户与二级域名的对应关系,确保每个用户的二级域名都能正确映射到其专属内容。 ... [详细]
  • 利用TensorFlow.js在网页浏览器中实现高效的人脸识别JavaScript接口
    作者|VincentMühle编译|姗姗出品|人工智能头条(公众号ID:AI_Thinker)【导读】随着深度学习方法的应用,浏览器调用人脸识别技术已经得到了更广泛的应用与提升。在 ... [详细]
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社区 版权所有