Tensor flow实现FCN和linear regression: Y=XW+b

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Arctic_Beacon/article/details/83276861

FCN(fully connect network)和linear regression其中的数学模型为:

Y=XW+b

(一)1维情形

举栗:输入向量x为观测一次得到的一组特征(N个特征),单次输出y为这次观测值作出预测,其间的映射为f:R^{^{N}} \rightarrow R

共有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种分类。其间的映射为:f:R^{N\times N}\rightarrow R^{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,便于理解。

猜你喜欢

转载自blog.csdn.net/Arctic_Beacon/article/details/83276861