構建神經網路之隱藏層
import tensorflow as tf
import numpy as np
'''定義新增層,引數依次為輸入資料、上一層節點數、隱藏層神經元個數即輸出資料形狀、激勵函式(=none表示無激勵函式)
'''def
add_layer
(inputs,in_size,out_size,activation_function=
none):
weights=tf.variable(tf.random_normal(
[in_size,out_size]))
#權重weight採用生成正態分佈隨機變數矩陣,行為in_size,列為out_size
biases=tf.variable(tf.zeros([1
,out_size])+
0.1)
#偏差矩陣為1行out_size列的0.1
y=tf.matmul(inputs,weights)
+biases
#y=inouts*weight+biases
#判斷activation_function是否存在,若不存在則直接輸出y,否則將y傳入激勵函式activation_function
if activation_function is
none
: outputs=y
else
: outputs=activation_function(y)
#將y值傳入activation_function
#函式返回outputs
return outputs
x_data=np.linspace(-1
,1,300)[
:,np.newaxis]
#np.linespace表示-1到1之間等分成300份的一維陣列
#[:,np.newaxis]表示列新增新的維度,x_data成為300行1列的矩陣,形狀從乙個一維陣列(30,)變成(30,1)
noise=np.random.normal(0,
0.05
,x_data.shape)
#加入雜訊,y會在x^2-0.5的線附近出現,使得資料更加真實,格式與x_data保持一致
y_data=np.square(x_data)
-0.5
+noise
#y=x^2-0.5+noise
xs=tf.placeholder(tf.float32,
[none,1
])ys=tf.placeholder(tf.float32,
[none,1
])#用placeholder佔位,none表示接受任意資料
l1=add_layer(xs,1,
10,activation_function=tf.nn.relu)
#l1定義為1行10列的新增層,即新增層l1輸入為x_data,輸入層有1個節點,本層有10個神經元,激勵函式為relu
prediction=add_layer(l1,10,
1,activation_function=
none
)#輸出層
loss=tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction)
,reduction_indices =[1
]))#定義損失函式,每個實際值與**值差的平方求和再求平均數,計算得分
train_step=tf.train.gradientdescentoptimizer(
0.1)
.minimize(loss)
#定義反向傳播函式,使用梯度下降法使得分變小
init=tf.global_variables_initializer(
)#初始化變數
with tf.session(
)as sess:
sess.run(init)
for i in
range
(1000):
sess.run(train_step,feed_dict=)if
(i%50==0
):print
(sess.run(loss,feed_dict=))
#列印損失函式得分
loss得分情況輸出如下,可以看到**越來越準確 scala總結 4 隱式轉換以及隱式引數
隱式轉換 implicit def inttostring i int i.tostring implicit def可以對一種型別的引數自動做轉換,在上面的隱式轉換作用域中,所有int 如果不符合編譯要求,會先被轉換為string 不可有多個隱式轉換,如再加乙個implicit def intto...
Scala入門之隱式轉換與隱式引數
隱式轉換是一項強大的程式語言功能,它不僅能夠簡化程式設計,也能夠使程式具有很強的靈活性。隱式函式的名稱對結構沒有影響.函式可以是任何名字,只看引數與返回,也就是看能不能把傳入的引數變成需要的型別就行了。隱式轉換可以定義在目標檔案當中,即隱式轉換函式與目標 在同乙個檔案當中,也可以將隱式轉換集中放置在...
構建之法筆記4
現在的開發往往是很多人合作完成一款軟體應用,不同的開發人員之間就存在依賴關係。我需要呼叫你寫的 模組,你也需要呼叫我寫的 模組,但是因為不了解模組的變化,模組沒有達到高內聚低耦合造成了對其他模組的影響,往往會產生錯誤。在確定發布這個模組的時候,要經過完整的單元測試,為了達到事半功倍的效果,我們可以把...