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,便于理解。
更多数学原理小文请关注公众号:未名方略