TensorFlow練習(四) 構造神經網路

2021-08-07 14:01:41 字數 2519 閱讀 6981

本文介紹怎樣建造乙個完整的神經網路,包括新增神經層,計算誤差,訓練步驟,判斷是否在學習.

import tensorflow as tf

import numpy as np

# 構造新增乙個神經層的函式

def add_layer(inputs,in_size,out_size,activation_function=none): # 輸入值,輸入的大小,輸出的大小,激勵函式

weights = tf.variable(tf.random_normal([in_size,out_size])) #定義矩陣 隨機變數生成初始的時候會比全0的好

# 定義weights為乙個in_size行, out_size列的隨機變數矩陣

biases = tf.variable(tf.zeros([1,out_size]) + 0.1) # 推薦初始值不為0

wx_plus_b = tf.matmul(inputs,weights) + biases

# 當激勵函式為none時,輸出就是當前的**值——wx_plus_b

# 不為none時,就把wx_plus_b傳到activation_function()函式中得到輸出。

if activation_function is none: # 線性關係,就不需要再加非線性方程

outputs = wx_plus_b

else:

outputs = activation_function(wx_plus_b)

return outputs

# 構建所需的資料。 這裡的x_data和y_data並不是嚴格的一元二次函式的關係,因為我們多加了乙個noise,這樣看起來會更像真實情況。

x_data = np.linspace(-1,1,300)[:,np.newaxis] # 加乙個維度 轉換成300行1列

# print(x_data)

noise = np.random.normal(0,0.05,x_data.shape) # 期望,方差,格式

y_data = np.square(x_data) - 0.5 + noise

xs = tf.placeholder(tf.float32,[none,1])

ys = tf.placeholder(tf.float32,[none,1])

# 利用佔位符定義我們所需的神經網路的輸入。 tf.placeholder()就是代表佔位符,none代表無論輸入有多少都可以,因為輸入只有乙個特徵,所以這裡是1

# 接下來,我們就可以開始定義神經層了。 通常神經層都包括輸入層、隱藏層和輸出層。這裡的輸入層只有乙個屬性, 所以我們就只有乙個輸入;隱藏層我們可以自己假設,這裡我們假設隱藏層有10個神經元; 輸出層和輸入層的結構是一樣的,所以我們的輸出層也是只有一層。 所以,我們構建的是——輸入層1個、隱藏層10個、輸出層1個的神經網路。

# 下面,我們開始定義隱藏層,利用之前的add_layer()函式,這裡使用 tensorflow 自帶的激勵函式tf.nn.relu。

l1 = add_layer(xs,1,10,activation_function=tf.nn.relu) # 隱藏層

# 接著,定義輸出層。此時的輸入就是隱藏層的輸出——l1,輸入有10層(隱藏層的輸出層),輸出有1層。

predition = add_layer(l1,10,1,activation_function=none) # 輸出層 輸入10層,輸出1層

# 計算**值prediction和真實值的誤差,對二者差的平方求和再取平均。

loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-predition),

reduction_indices=[1])) #

# tf.train.gradientdescentoptimizer()中的值通常都小於1,這裡取的是0.1,代表以0.1的效率來最小化誤差loss。

train_step = tf.train.gradientdescentoptimizer(0.08).minimize(loss)

# 優化器 目標,最小化誤差

init = tf.global_variables_initializer()

sess = tf.session()

sess.run(init)

# 我們讓機器學習2000次。機器學習的內容是train_step, 用 session 來 run 每一次 training 的資料,逐步提公升神經網路的**準確性。 (注意:當運算要用到placeholder時,就需要feed_dict這個字典來指定輸入。)

for i in range(2000):

sess.run(train_step,feed_dict=)

if i % 50 ==0: # 每50步我們輸出一下機器學習的誤差。

print(sess.run(loss,feed_dict=))

學習結果:

tensorflow學習04 構造線性回歸模型

在學完前幾天的tensorflow基本變數定義和矩陣定義,今天我學習了tensorflow的構造線性回歸模型 構造資料並呼叫matplotlib進行顯示 源 匯入numpy tensorflow matplotlib import numpy as np import tensorflow as t...

軟體構造(四)

實驗三的標題是 reusability and maintainability oriented software construction,即面向可復用性和可維護性的軟體構造。這裡就向物件導向程式設計的較為深入的階段了。我們學習了繼承委派關係,以及設計模式,以實現可維護可復用程式設計。實驗主要內容...

java構造方法練習

7 下列方法定義中,正確的是 a a int x int a,b b double x int a,int b c double x a,b d nt x int a,int b 8 下列方法定義中,正確的是 d a void x int a,int b void不用返回 b x int a,int...