根據tensorflow實戰google深度學習框架的樣例,詳細註解簡單神經網路**的各部分作用如下:
import tensorflow as tf
from numpy.random import randomstate
# 定義訓練資料batch的大小
batch_size = 8
# 定義神經網路的引數,每一層的節點數分別為2,3,1
# 這裡用隨機正態分佈初始化引數,標準差是1
w1 = tf.variable(tf.random_normal([2, 3], stddev=1, seed=1))
w2 = tf.variable(tf.random_normal([3, 1], stddev=1, seed=1))
# 在shape的乙個維度上使用none可以方便使用不同的batch大小。在訓練時需要把資料分成比較小的batch,但是在測試時,可以一次性使用全部資料
# 當資料集比較小時這樣比較方便測試,但資料集比較大時,將大量資料放入乙個batch可能會導致記憶體溢位
# placeholder是tensorflow的佔位符節點,由placeholder方法建立,其也是一種常量,但是由使用者在呼叫run方法是傳遞的,
# 也可以將placeholder理解為一種形參。即其不像constant那樣直接可以使用,需要使用者傳遞常數值。
# 引數說明
# dtype:資料型別,必填,預設為value的資料型別,傳入引數為tensorflow下的列舉值(float32,float64.......)
# shape:資料形狀,選填,不填則隨傳入資料的形狀自行變動,可以在多次呼叫中傳入不同形狀的資料
# name:常量名,選填,預設值不重複,根據建立順序為(placeholder,placeholder_1,placeholder_2.......)
# 可以理解為定義的是輸入層和輸出層
x = tf.placeholder(tf.float32, shape=(none, 2), name='x-input')
y_ = tf.placeholder(tf.float32, shape=(none, 1), name='y-input')
# 定義神經網路前向傳播過程,用到了矩陣乘法
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
# 定義損失函式和反向傳播的演算法
# 求平均值tf.reduce_mean(input_tensor, reduction_indices=none, keep_dims=false, name=none)
# 引數1--input_tensor:待求值的tensor。
# 引數2--reduction_indices:在哪一維上求解。
# tf.log()用於求對數
# tf.clip_by_value用於將第乙個引數超出範圍的部分重新賦值,大小為第二三個引數
cross_entropy = -tf.reduce_mean(y_*tf.log(tf.clip_by_value(y, 1e-10, 1.0)))
# 0.01表示學習率
train_step = tf.train.adamoptimizer(0.01).minimize(cross_entropy)
# 隨機生成乙個模擬資料集,注意:這裡1為隨機數種子,只要隨機數種子seed相同,產生的隨機數系列就相同
rdm = randomstate(1)
dataset_size = 128
# 2表示產生乙個二維陣列
x = rdm.rand(dataset_size, 2)
# 定義規則給出標籤,根據x1和x2的和給出標籤
y = [[int(x1+x2 < 1)] for (x1, x2) in x]
# 建立乙個會話來執行session
with tf.session() as sess:
# 初始化所有變數
init_op = tf.initialize_all_variables()
sess.run(init_op)
# 檢視變數初始值
print(sess.run(w1))
print(sess.run(w2))
# 設定訓練輪數
steps = 5000
for i in range(steps):
# 每次選取batch—size個樣本進行訓練
start = (i * batch_size) % dataset_size
end = min(start+batch_size, dataset_size)
# feed_dict的作用是給使用placeholder建立出來的tensor賦值,因為前面時none,所以這裡每次輸入多少資料都是可以的
sess.run(train_step, feed_dict=)
if i % 1000 == 0:
# 每執行一千次,看一次損失熵
total_cross_entropy = sess.run(cross_entropy, feed_dict=)
print("after %d training step(s), cross entropy on all data is %g" % (i, total_cross_entropy))
print(sess.run(w1))
print(sess.run(w2))
# sess.run可以理解為檢視,但是檢視因為有計算的先後所以也要按照順序
如有疏漏還請告知,謝謝! Tensorflow的基本使用 機器學習筆記
學習資料 中文社群 基本概念 綜述 tensorflow 是乙個程式設計系統,使用圖來表示計算任務.圖中的節點被稱之為 op operation 的縮寫 乙個 op 獲得 0 個或多個tensor,執行計算,產生 0 個或多個tensor.每個 tensor 是乙個型別化的多維陣列.例如,你可以將一...
tensorflow 學習 學習中
基於 virtualenv 的安裝 在 linux 上 sudo apt get install python pip python dev python virtualenv 在 mac 上 sudo easy install pip 如果還沒有安裝 pip sudo pip install up...
tensorflow學習筆記
tensorflow安裝可以直接通過命令列或者原始碼安裝,在此介紹tensorflow8命令列安裝如下 安裝tensorflow sudo pip install upgrade 另外,解除安裝tensorflow命令為 sudo pip uninstall tensorflow tensorflo...