zoukankan      html  css  js  c++  java
  • 神经网络一(用tensorflow搭建简单的神经网络并可视化)

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



    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:UsersyuanninesunsDesktoppythonlogs

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

  • 相关阅读:
    Windows10系统PHP开发环境配置
    hexo博客MathJax公式渲染问题
    js获取单选框和复选框的值并判断值存在后允许转跳
    Google HTML/CSS 编码规范
    js阻止表单提交的两种方法
    php下安装动态扩展库的相关事项
    PHP程序员的职业规划,走进PHP后端工程师的世界
    allen今天来开通我的程序员的博客
    ajax
    jQuery语法
  • 原文地址:https://www.cnblogs.com/yuanninesuns/p/8047686.html
Copyright © 2011-2022 走看看