Tensorflow速成學習筆記 二

2021-08-29 13:57:21 字數 2746 閱讀 8060

根據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...