神經網絡一(用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:\Users\yuanninesuns\Desktop\python\logs

  將控制台輸出的這個網址敲到瀏覽器上就能看到可視化內容。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM