Tensorflow 卷积神经网络

卷积神经网络

全连接NN 

每个神经元与前后相邻层的每一个神经元都有连接关系,输入是特征,输出为预测的结果。

参数个数:\sum (Front*Back+Back)  前层*后层为权重w+后层偏置b

待优化参数过多容易导致模型过拟合,实际应用中会先对原始图像进行特征提取再吧提取到的特征喂给全连接神经网络

卷积 Convolution

  • 卷积可认为是一种有效提取图像特征的方法
  • 一般会用一个正方形卷积核,遍历图片上的每个点。图片区域内,相对应的每一个像素值,乘以卷积核内想对应点的权重,求和,再加上偏置。

输出图片变长=(输入图片边长-卷积核长+1)/步长

全零填充 Padding

在输入图片的周围添加一圈0,可以保证输出图片大小和输出图片大小相同

在Tensorflow框架中,使用参数padding='SAME'表示全零填充,padding=‘VAILD’为不使用全零填充

Tensorflow计算卷积

tf.nn.conv2d(
    [batch,5,5,1],    #输入描述 分辨率 与 通道数
    [3,3,1,16],        #卷积核描述 行列分辨率 通道数 核个数
    [1,1,1,1]           #核滑动步长  行步长 列步长 
    padding='VALID' 
)

池化  Pooling

  • 池化用于减少特征数量
  • 最大值池化可提取图片纹理,均值池化可保留背景特征

Tensorflow计算池化:

#最大值池化
tf.nn.max_pool(
    [batch,28,28,6],    #输入描述 分辨率 与 通道数
    [1,2,2,1],        #池化核描述 行列分辨率 通道数 核个数
    [1,2,2,1]           #池化核滑动步长  行步长 列步长 
    padding='SAME' )
#平均值池化
pool=tf.nn.avg_pool

舍弃 Dropout

在神经网络的训练过程中,将一部分神经元按照一定的概率从神经网络中短暂舍弃。使用时被舍弃的神经元回复链接。

tf.nn.dropout(上层输出,暂时舍弃的概率)

卷积NN:借助卷积核(kernel)提取特征后,送入全连接网络

 

lenet5

 

### 如何使用TensorFlow构建和训练卷积神经网络(CNN) #### 准备工作 为了能够顺利地创建并运行一个基于TensorFlow卷积神经网络模型,需要先安装必要的库文件。通常情况下,这涉及到安装最新版本的TensorFlow以及其他可能需要用到的数据处理工具如NumPy等。 ```bash pip install tensorflow numpy matplotlib ``` #### 加载数据集 对于大多数机器学习项目来说,获取高质量的数据是非常重要的一步。这里假设将要使用的是一种常见的图像分类数据集CIFAR-10作为例子[^2]: ```python import tensorflow as tf from tensorflow.keras import datasets, layers, models (train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data() # 归一化像素值到[0, 1]区间内 train_images, test_images = train_images / 255.0, test_images / 255.0 ``` #### 定义卷积基 接下来定义卷积部分的基础架构,这部分负责提取输入图片中的特征信息。每一层都会自动学习不同尺度下的模式匹配能力[^3]。 ```python model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) ``` #### 添加顶层分类器 在完成了特征抽取之后,还需要添加一些密集连接层来完成最终的任务——即对这些抽象出来的高级特性进行分类预测。最后一层采用softmax激活函数来进行多类别概率分布计算[^4]。 ```python model.add(layers.Flatten()) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(10)) ``` #### 编译与训练模型 设置好损失函数、优化算法以及评估指标后就可以开始正式训练过程了。此阶段会反复迭代整个数据集直到达到预设的最大轮次或者是满足特定停止条件为止。 ```python model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) history = model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels)) ``` #### 测试性能 经过充分的学习调整参数权重之后,应该利用测试集中未见过的新样本再次检验所建立起来的人工智能系统的实际效果如何。 ```python plt.plot(history.history['acc'], label='accuracy') plt.plot(history.history['val_acc'], label = 'validation accuracy') plt.xlabel('Epoch') plt.ylabel('Accuracy') plt.ylim([0, 1]) plt.legend(loc='lower right') test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2) print(f'Test Accuracy: {test_acc}') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值