TensorFlow学习笔记之四(MNIST数字识别)
文章目錄
- 1. 關于MNIST數據集
- 2. 前向傳播確定網絡結構
- 2.1 涉及的方法
1. 關于MNIST數據集
數據集和input_data文件
- 有6萬張28*28像素點的0~9手寫數字圖片和標簽,用于測試。
- 有1萬張28*28像素點的0~9手寫數字圖片和標簽,用于測試。
每張圖片有784個像素點(28*28=784)組成一個長度為784的一維數組,用做個輸入特征
[000010011010...011010]728?1\begin{gathered} \begin{bmatrix} 0 & 0 & 0 &0 & 1 & 0 &0 & 1 & 1 &0 & 1 & 0 &...&0 & 1 & 1 &0 & 1 & 0 \end{bmatrix} \end{gathered}_{728*1} [0?0?0?0?1?0?0?1?1?0?1?0?...?0?1?1?0?1?0?]?728?1?
圖片的標簽以一維數組形式給出,每個元素表示對應分類出現的概率。比如下面的標簽表示數字4
[0000100000]\begin{gathered} \begin{bmatrix} 0 & 0 & 0 &0 & 1 & 0 &0 & 0 & 0 & 0 \end{bmatrix} \end{gathered} [0?0?0?0?1?0?0?0?0?0?]?
2. 前向傳播確定網絡結構
""" 前向傳播確定網絡結構 """ """ 前向傳播確定網絡結構 """import tensorflow as tfINPUT_NODE = 784 # 輸入節點 784(一張圖片28*28,共有784個像素點)個 OUTPUT_NODE = 10 # 輸出10數,這個等于要預測類別的數目。在這里表示的是該圖片為0~9之間的概率LAYER1_NODE = 500 # 隱藏層節點個數def get_weight(shape, regularizer):"""初始化權重"""# 隨機生成參數ww = tf.Variable(tf.truncated_normal(shape, stddev=0.1))if regularizer != None:"""如果使用正則化"""# 將每個變量的損失加入到總損失lossestf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(regularizer)(w))return wdef get_bias(shape):"""初始化偏置值"""b = tf.Variable(tf.zeros(shape))return bdef forward(x, regularizer):"""該網絡的結構有兩層,一個隱藏層和一個輸出層"""# x為1*784的矩陣,w1是一個784*500的矩陣,b1是一個1*500的矩陣w1 = get_weight([INPUT_NODE, LAYER1_NODE], regularizer)b1 = get_bias([LAYER1_NODE])y1 = tf.nn.relu(tf.matmul(x, w1) + b1) # 最終結果,y1是一個1*500的矩陣# y1為1*500的矩陣,w2為500*10的矩陣,b2為1*10的矩陣w2 = get_weight([LAYER1_NODE, OUTPUT_NODE], regularizer)b2 = get_bias([OUTPUT_NODE])y = tf.matmul(y1, w2) + b2 # 最終輸出,y為一個1*10的矩陣return y整個網絡大概是這個樣子的
其中,輸入X為一個1784的矩陣(為了方便自己記憶,就不說向量了)。w1是一個784500的矩陣,b1是一個1500的矩陣。第一層的輸入為y1是一個1500的矩陣。
第二層的輸入即第一層的輸出,為y1(一個1500的矩陣)。w2為50010的矩陣,b2為110的矩陣。輸出y為一個110的矩陣
2.1 涉及的方法
tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None):輸出一個shape的張量,里面的參數服從正態分布,均值為mean,標準差為stddev,數據類型為dtype,隨機種子為seed。
未完待續。。。
總結
以上是生活随笔為你收集整理的TensorFlow学习笔记之四(MNIST数字识别)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WordPress上传大小限制问题
- 下一篇: 《You Only Look Once: