深度学习|tensorflow张量运算

640?wx_fmt=png

前言

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

  • x和权重矩阵相乘

  • 加上偏差值

  • 激活函数

640?wx_fmt=jpeg

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

矩阵相乘和相加

相乘

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

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


  2. W = tf.Variable([[-0.5,-0.2 ],

  3.                 [-0.3, 0.4 ],

  4.                 [-0.5, 0.2 ]])


  5. XW =tf.matmul(X,W )


  6. with tf.Session() as sess:

  7.    init = tf.global_variables_initializer()

  8.    sess.run(init)

  9.    print(sess.run(XW ))

  10. # [[-1.29999995  0.40000001]]

相加

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

 
 
  1. b = tf.Variable([[ 0.1,0.2]])

  2. XW =tf.Variable([[-1.3,0.4]])


  3. Sum =XW+b

  4. with tf.Session() as sess:

  5.    init = tf.global_variables_initializer()

  6.    sess.run(init)

  7.    print('Sum:')    

  8.    print(sess.run(Sum ))

  9. # Sum:

  10. #[[-1.19999993  0.60000002]]

神经网络实现

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

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


  2. W = tf.Variable([[-0.5,-0.2 ],

  3.                 [-0.3, 0.4 ],

  4.                 [-0.5, 0.2 ]])


  5. b = tf.Variable([[0.1,0.2]])


  6. XWb =tf.matmul(X,W)+b


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


  8. with tf.Session() as sess:

  9.    init = tf.global_variables_initializer()

  10.    sess.run(init)

  11.    print('XWb:')    

  12.    print(sess.run(XWb ))    

  13.    print('y:')    

  14.    print(sess.run(y ))

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

随机初始值

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

 
 
  1. W = tf.Variable(tf.random_normal([3, 2]))

  2. b = tf.Variable(tf.random_normal([1, 2]))

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

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

  5. with tf.Session() as sess:

  6.    init = tf.global_variables_initializer()

  7.    sess.run(init)

  8.    print('b:')

  9.    print(sess.run(b ))    

  10.    print('W:')

  11.    print(sess.run(W ))

  12.    print('y:')

  13.    print(sess.run(y ))  

输入用placeholder

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

 
 
  1. W = tf.Variable(tf.random_normal([3, 2]))

  2. b = tf.Variable(tf.random_normal([1, 2]))

  3. X = tf.placeholder("float", [None,3])

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

  5. with tf.Session() as sess:

  6.    init = tf.global_variables_initializer()

  7.    sess.run(init)

  8.    X_array = np.array([[0.4,0.2,0.4]])

  9.    (_b,_W,_X,_y)=sess.run((b,W,X,y),feed_dict={X:X_array})

  10.    print('b:')

  11.    print(_b)    

  12.    print('W:')

  13.    print(_W)

  14.    print('X:')

  15.    print(_X)

  16.    print('y:')

  17.    print(_y)

总结

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

 
 
  1. def layer(output_dim,input_dim,inputs, activation=None):

  2.    W = tf.Variable(tf.random_normal([input_dim, output_dim]))

  3.    b = tf.Variable(tf.random_normal([1, output_dim]))

  4.    XWb = tf.matmul(inputs, W) + b

  5.    if activation is None:

  6.        outputs = XWb

  7.    else:

  8.        outputs = activation(XWb)

  9.    return outputs


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值