Tensor flow實現FCN和linear regression: Y=XW+b
FCN(fully connect network)和linear regression其中的數學模型為:
Y=XW+b
(一)1維情形
舉慄:輸入向量x為觀測一次得到的一組特徵(N個特徵),單次輸出y為這次觀測值作出預測,其間的對映為
共有M次觀測。
加上偏置b,可以這樣實現:
x=[x1,x2,...,xN,1]
第m列向量w=[w1,w2,...,wN,b]
程式碼:
X = tf.placeholder(tf.float32,[None,num_features])
Y = tf.placeholder(tf.float32,[None,1])
w = tf.Variable(tf.random_normal((num_features,1)),name='weights')
pred = tf.matmul(X,w)
上述運算為:
X:?× (N+1)
w:(N+1)×1
Y:?×1
點評:程式碼中num_features為N+1, 即特徵增廣1,目的是為了加上偏置b。問號為重複觀測的次數,這裡為M。可以看出,預測值pred為長度為M的一維向量。
(二)2維情形
栗子:輸入影象為N×N解析度,首先將影象每一行依次放進一個行向量,如32×32影象重排為長度1024的向量。輸出y分類的概率,共M種分類。其間的對映為:
X = tf.placeholder(tf.float32,[None,n_dim])
Y = tf.placeholder(tf.float32,[None,n_classes])
w = tf.Variable(tf.random_normal([n_dim,n_classes],stddev=0.01),name='weights')
b = tf.Variable(tf.random_normal([n_classes]),name='weights')
out = tf.matmul(X,w) + b
上述運算為
X:?× (N×N)
w:(N × N) × M
Y:?× M
b: M × 1
點評:程式碼中n_dim即是N×N,n_class即是M。問號?代表共K副影象。那麼上述運算除了矩陣相乘,還涉及第三維,即輸出out的size:1×M×K,便於理解。