Tensorflow 卷积神经网络基础

一. 卷积层实现

在Tensorflow中,可以通过自定义权值的底层方式,也可以通过调用线程的卷积层类的高层方式搭建卷积层的网络。

1. 自定义权值

import tensorflow as tf 
x = tf.random.normal([2,5,5,3]) # 模拟输入,3 通道,高宽为5
w = tf.random.normal([3,3,3,4]) # 4 个3x3 大小的卷积核
# 步长为,padding 设置为输出、输入同大小
# 需要注意的是, padding=same 只有在strides=1 时才是同大小
out = tf.nn.conv2d(x,w,strides=1,padding='SAME')
'''
out.shape([2,5,5,4])'''
import tensorflow as tf 
x = tf.random.normal([2,5,5,3])
w = tf.random.normal([3,3,3,4])
# 高宽先padding 成可以整除3 的最小整数6,然后6 按3 倍减少,得到2x2
out = tf.nn.conv2d(x,w,strides=3,padding='SAME')
'''
out.shape([2,2,2,4])'''
# 根据[cout]格式创建偏置向量
b = tf.zeros([4])
# 在卷积输出上叠加偏置向量,它会自动broadcasting 为[b,h',w',cout]
out = out + b

2. 卷积层

import tensorflow as tf 
x = tf.random.normal([2,5,5,3])
layer = tf.keras.layers.Conv2D(4,kernel_size=3,strides=1,padding='SAME')
out = layer(x)
'''
out.shape([2,5,5,4])'''

二. 池化层

在卷积层中,通过调整步长来实现特征图高宽成倍缩小,池化层是专门进行图片缩减功能的网络层,主要有:最大池化层、平均池化层。

1. 最大池化层

tf.keras.layers.MaxPooling2D(pool_size=3,strides=2)

2. 平均池化层

tf.keras.layers.AveragePooling2D(pool_size=3,strides=2)

三. BatchNorm层

参数标准化层,使得网络的超参数设定更加自由,比如更大的学习率,更随意的网络初始化。

以LeNet-5网络模型为例,在卷积层后添加BN层

network = Sequential([ # 网络容器
layers.Conv2D(6,kernel_size=3,strides=1),
# 插入BN 层
layers.BatchNormalization(),
layers.MaxPooling2D(pool_size=2,strides=2),
layers.ReLU(),
layers.Conv2D(16,kernel_size=3,strides=1),
# 插入BN 层
layers.BatchNormalization(),
layers.MaxPooling2D(pool_size=2,strides=2),
layers.ReLU(),
layers.Flatten(),
layers.Dense(120, activation='relu'),
# 此处也可以插入BN 层
layers.Dense(84, activation='relu'),
# 此处也可以插入BN 层
layers.Dense(10)
])

BN层在训练阶段和测试阶段行为不同,通过设置网络的参数training=True来区分训练和测试(False)
 

out = network(x, training=True) #训练阶段

out = network(x, training=False) #测试阶段
发布了93 篇原创文章 · 获赞 2 · 访问量 3032

猜你喜欢

转载自blog.csdn.net/qq_40041064/article/details/104822311
今日推荐