深度学习|tensorflow张量运算

前言

为什么我们单独讲解一个tensorflow的张量(矩阵)运算了?因为神经网络原理其实就是矩阵的运算。如图所示,我们有三个神经元,两个输出。其实背后的计算不过是:

  • x和权重矩阵相乘
  • 加上偏差值
  • 激活函数

所以,学会矩阵运算,是实现神经网络的第一步。

矩阵相乘和相加

相乘

矩阵的相乘我们使用tf.matmul方法。

X = tf.Variable([[1.,1.,1.]])

W = tf.Variable([[-0.5,-0.2 ],
                 [-0.3, 0.4 ],
                 [-0.5, 0.2 ]])
                        
XW =tf.matmul(X,W )
                       
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    print(sess.run(XW ))
# [[-1.29999995  0.40000001]]
相加

矩阵的加法很简单,就是用+即可完成。

b = tf.Variable([[ 0.1,0.2]])
XW =tf.Variable([[-1.3,0.4]])

Sum =XW+b
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    print('Sum:')    
    print(sess.run(Sum ))
# Sum:
#[[-1.19999993  0.60000002]]

神经网络实现

我们回到上图的问题,我们用tensorflow即可完成这个过程。

X = tf.Variable([[0.4,0.2,0.4]])

W = tf.Variable([[-0.5,-0.2 ],
                 [-0.3, 0.4 ],
                 [-0.5, 0.2 ]])
                         
b = tf.Variable([[0.1,0.2]])
    
XWb =tf.matmul(X,W)+b

y=tf.nn.relu(tf.matmul(X,W)+b)

with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    print('XWb:')    
    print(sess.run(XWb ))    
    print('y:')    
    print(sess.run(y ))

激活函数我们使用的是relu。如果值小于0就转换为0,大于0就是多少。当然如果想用sigmoid函数,用tf.nn.sigmoid即可。

随机初始值

神经网络中的权重和偏差刚开始都是随机的,后面我们通过反向传播来进行训练,通过优化算法获得最优值。 所以,我们首先对权重和偏差赋上随机值。

W = tf.Variable(tf.random_normal([3, 2]))
b = tf.Variable(tf.random_normal([1, 2]))
X = tf.Variable([[0.4,0.2,0.4]])
y=tf.nn.relu(tf.matmul(X,W)+b)
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    print('b:')
    print(sess.run(b ))    
    print('W:')
    print(sess.run(W ))
    print('y:')
    print(sess.run(y ))   
输入用placeholder

神经元的输入我们是不固定的,这里我们用placeholder来实现。

W = tf.Variable(tf.random_normal([3, 2]))
b = tf.Variable(tf.random_normal([1, 2]))
X = tf.placeholder("float", [None,3])
y=tf.nn.relu(tf.matmul(X,W)+b)
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    X_array = np.array([[0.4,0.2,0.4]])
    (_b,_W,_X,_y)=sess.run((b,W,X,y),feed_dict={X:X_array})
    print('b:')
    print(_b)    
    print('W:')
    print(_W)
    print('X:')
    print(_X)
    print('y:')
    print(_y)

总结

由于神经网络不是一成不变的(神经元个数,隐含层,数据情况都是不同的),所以我们将上面的代码,定义为函数,这样就可以灵活使用啦。

def layer(output_dim,input_dim,inputs, activation=None):
    W = tf.Variable(tf.random_normal([input_dim, output_dim]))
    b = tf.Variable(tf.random_normal([1, output_dim]))
    XWb = tf.matmul(inputs, W) + b
    if activation is None:
        outputs = XWb
    else:
        outputs = activation(XWb)
    return outputs

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券