前向傳播
tensorflow.keras 搭建網路時,內部的網路可以直接完成所有層的前向計算。全連線dense() 層,最後一層的神經元的個數需要和最後一層線性函式 w x + b 的維度對應上,中間的其他層的神經元的個數可以任意指定,只要損失函式能達到較優。
# 匯入常用網路層 layersfrom tensorflow.keras import layers,sequential
# 隱藏層 1
fc1 = layers.dense(256, activation=tf.nn.relu)
# 隱藏層 2
fc2 = layers.dense(128, activation=tf.nn.relu)
# 隱藏層 3
fc3 = layers.dense(64, activation=tf.nn.relu)
# 輸出層
fc4 = layers.dense(10, activation=none)
x = tf.random.normal([4,28*28])
# 通過隱藏層 1 得到輸出
h1 = fc1(x)
# 通過隱藏層 2 得到輸出
h2 = fc2(h1)
# 通過隱藏層 3 得到輸出
h3 = fc3(h2)
# 通過輸出層得到網路輸出
h4 = fc4(h3)
# 匯入 sequential 容器from tensorflow.keras import layers,sequential
# 通過 sequential 容器封裝為乙個網路類
model = sequential([
layers.dense(256, activation=tf.nn.relu) , # 建立隱藏層 1
layers.dense(128, activation=tf.nn.relu) , # 建立隱藏層 2
layers.dense(64, activation=tf.nn.relu) , # 建立隱藏層 3
layers.dense(10, activation=none) , # 建立輸出層
])
out = model(x) # 前向計算得到輸出
梯度計算
with tf.gradienttape() as tape: # 梯度記錄器# x: [b, 28*28]
# 隱藏層 1 前向計算, [b, 28*28] => [b, 256]
h1 = x@w1 + tf.broadcast_to(b1, [x.shape[0], 256])
h1 = tf.nn.relu(h1)
# 隱藏層 2 前向計算, [b, 256] => [b, 128]
h2 = h1@w2 + b2
h2 = tf.nn.relu(h2)
# 隱藏層 3 前向計算, [b, 128] => [b, 64]
h3 = h2@w3 + b3
h3 = tf.nn.relu(h3)
# 輸出層前向計算, [b, 64] => [b, 10]
h4 = h3@w4 + b4
tensorflow2 0視訊記憶體設定
遇到乙個問題 新買顯示卡視訊記憶體8g但是tensorflow執行的時候介面顯示只有約6.3g的視訊記憶體可用,如下圖 即限制了我的視訊記憶體,具體原因為什麼我也不知道,但原來的視訊記憶體小一些的顯示卡就沒有這個問題。目前的解決辦法是 官方文件解決 然後對應的中文部落格 總結一下,就是下面的兩個辦法...
Tensorflow2 0 啟用函式
常用啟用函式及對應特點 神經網路結構的輸出為所有輸入的加權和,這導致整個神經網路是乙個線性模型。而線性模型不能解決異或問題,且面對多分類問題,也顯得束手無策。所以為了解決非線性的分類或回歸問題,啟用函式必須是非線性函式。神經網路中啟用函式的主要作用是提供網路的非線性建模能力。這是因為反向傳播演算法就...
初步了解TensorFlow2 0
為什麼要學習tensorflow?深度學習能夠更好地抽取資料中的規律,從而給公司帶來更大的價值 tensorflow是強大且靈活的開源框架 使用廣泛 2.0更加強大 易用 成熟 tensorflow是什麼?是google的開源軟體庫 採用資料流圖,用於數值計算 支援多平台 gpu cpu 移動裝置 ...