TensorFlow——卷积神经网络(三)

1、tf.layers.conv2d

import tensorflow as tf

# 设置输入形状为[1,5,5,1] 的随机矩阵
input = tf.Variable(tf.random_normal([1, 5, 5, 1]))

# 步长为 1 的卷积操作,一个选择'VALID'方式填充一个选择'SAME'方式填充
same_conv2d_s1 = tf.layers.conv2d(input, filters=1, kernel_size=3, strides=1, padding='SAME')
valid_conv2d_s1 = tf.layers.conv2d(input, filters=1, kernel_size=3, strides=1, padding='VALID')

# 步长为 2 的卷积操作,一个选择'VALID'方式填充一个选择'SAME'方式填充
same_conv2d_s2 = tf.layers.conv2d(input, filters=1, kernel_size=3, strides=2, padding='SAME')
valid_conv2d_s2 = tf.layers.conv2d(input, filters=1, kernel_size=3, strides=2, padding='VALID')

# run 运行,打印不同步长不同天秤方式下的形状变化
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print('strides == 1')
    print(valid_conv2d_s1.get_shape())
    print(same_conv2d_s1.get_shape())
    print('strides == 2')
    print(valid_conv2d_s2.get_shape())
    print(same_conv2d_s2.get_shape())

2、tf.layers.max_pooling2d

import tensorflow as tf

# 定义一个两行三列的矩阵
x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.]])

# 转换形状为tf.layers.max_pool所接受的形状(batch, height, width, channels)
x = tf.reshape(x, [1, 2, 3, 1])

# 设置tf.layers.max_pool进行最大池化,一个选择'VALID'方式填充一个选择'SAME'方式填充
# 卷积核大小为2*2,卷积步长为2
valid_pad = tf.layers.max_pooling2d(x, pool_size=2, strides=2, padding='VALID')
same_pad = tf.layers.max_pooling2d(x, pool_size=2, strides=2, padding='SAME')

# run运行,打印两种不同填充方式的结果:
# 一个效果为舍弃最后一列,一个填充一行
with tf.Session() as sess:
    print('VALID:')
    print(sess.run(valid_pad))
    print('SAME:')
    print(sess.run(same_pad))

# 打印形状shape
print('x.shape:')
print(x.get_shape())
print('valid_pad.shape:')
print(valid_pad.get_shape())
print('same_pad.shape:')
print(same_pad.get_shape())

3、tf.nn.conv2d

import tensorflow as tf

# 设置输入形状为[1,5,5,1] 的随机矩阵
input = tf.Variable(tf.random_normal([1, 5, 5, 1]))

# 设置卷积核的形状,3,3 输入的channels为1,输出channels为1
# [filter_height, filter_width, in_channels, out_channels]
filter = tf.Variable(tf.random_normal([3, 3, 1, 1]))

# 步长为 1 的卷积操作,一个选择'VALID'方式填充一个选择'SAME'方式填充
same_conv2d_s1 = tf.nn.conv2d(input, filter, [1, 1, 1, 1], padding='SAME')
valid_conv2d_s1 = tf.nn.conv2d(input, filter, [1, 1, 1, 1], padding='VALID')

# 步长为 2 的卷积操作,一个选择'VALID'方式填充一个选择'SAME'方式填充
same_conv2d_s2 = tf.nn.conv2d(input, filter, [1, 2, 2, 1], padding='SAME')
valid_conv2d_s2 = tf.nn.conv2d(input, filter, [1, 2, 2, 1], padding='VALID')

# run 运行,打印不同步长不同天秤方式下的形状变化
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print('strides == 1')
    print(valid_conv2d_s1.get_shape())
    print(same_conv2d_s1.get_shape())
    print('strides == 2')
    print(valid_conv2d_s2.get_shape())
    print(same_conv2d_s2.get_shape())

4、tf.nn.max_pool

import tensorflow as tf

# 定义一个两行三列的矩阵
x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.]])

# 转换形状为tf.nn.max_pool所接受的形状4-D张量。
x = tf.reshape(x, [1, 2, 3, 1])

# 设置tf.nn.max_pool进行最大池化,一个选择'VALID'方式填充一个选择'SAME'方式填充
# 卷积核大小为2*2,卷积步长为2
valid_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='VALID')
same_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='SAME')

# run运行,打印两种不同填充方式的结果:
# 一个效果为舍弃最后一列,一个填充一行
with tf.Session() as sess:
    print('VALID:')
    print(sess.run(valid_pad))
    print('SAME:')
    print(sess.run(same_pad))

# 打印形状shape
print('x.shape:')
print(x.get_shape())
print('valid_pad.shape:')
print(valid_pad.get_shape())
print('same_pad.shape:')
print(same_pad.get_shape())

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值