实现了带有池化的卷积层的前向传播过程

环境:
  tensorflow 1.14
  python 3.5
  jupyter notebook

import tensorflow as tf
import numpy as np
import tensorflow as tf
import numpy as np

使用numpy初始化数组M,注意M不会被tf识别为张量
M = np.array([[[-2],[2],[0],[3]],
              [[1],[2],[-1],[2]], 
              [[0],[-1],[1],[0]]], dtype="float32") .reshape(1,3,4,1)# 通过get_variable()函数创建过滤器的权重和偏置
# [2,2,1,1] 代表 [卷积核尺寸,卷积核尺寸, 当前层深度,过滤器深度]
filter_weight=tf.get_variable("weights",[2,2,1,1], initializer = tf.constant_initializer([[2, 0], [-1,1]]))
# [1]代表过滤器的深度,也是神经网络下一层的深度
biases = tf.get_variable("biase", [1], initializer=tf.constant_initializer(1))
x = tf.placeholder('float32', [1,None, None, 1])
# 通过get_variable()函数创建过滤器的权重和偏置
# [2,2,1,1] 代表 [卷积核尺寸,卷积核尺寸, 当前层深度,过滤器深度]
filter_weight=tf.get_variable("weights",[2,2,1,1], initializer = tf.constant_initializer([[2, 0], [-1,1]]))
# [1]代表过滤器的深度,也是神经网络下一层的深度
biases = tf.get_variable("biase", [1], initializer=tf.constant_initializer(1))
x = tf.placeholder('float32', [1,None, None, 1])
# 参数strides为不同维度上的步长 但由于仅在矩阵长宽上有效,所以第一个和最后一个元素固定都是1
conv = tf.nn.conv2d(x, filter_weight, strides=[1,1,1,1], padding="SAME")
add_bias = tf.nn.bias_add(conv, biases)
# max_poool() 函数实现了最大池化层的前向传播过程
pool = tf.nn.max_pool(add_bias, ksize=[1,2,2,1], strides=[1,2,2,1],padding="SAME")
M.shape
with tf.Session() as sess:
    tf.global_variables_initializer().run()
    M_conv = sess.run(add_bias, feed_dict={x:M})
    M_pool = sess.run(pool, feed_dict={x:M})
#     print(sess.run(filter_weight))
#     print(sess.run(biases))
#     print(M)
    print(M.shape)
    print("M after convolution:\n", M_conv)
    print("M after poolding:\n", M_pool)

结果如下:

输入M的shape:
(1, 3, 4, 1)
M after convolution:
 [[[[-2.]
   [ 2.]
   [ 4.]
   [ 5.]]

  [[ 2.]
   [ 7.]
   [-2.]
   [ 5.]]

  [[ 1.]
   [-1.]
   [ 3.]
   [ 1.]]]]
M after poolding:
 [[[[7.]
   [5.]]

  [[1.]
   [3.]]]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我哈士奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值