# tensorflow学习笔记 (五) (卷积神经网络)

### 文章目录

[En]

Because in the real application scene, there may be many parameters to be optimized, which can easily lead to over-fitting of the model, we can first extract several layers of features from the original image, and convolution calculation is an effective feature extraction method.

## 二、卷积相关

### ; 2.1 两种卷积核的比较与感受野

[En]

The receptive fields of the two small squares pointed to by the red arrow are both 5 because they both describe the pixels of the original 5-by-5 square.

### ; 2.3 批标准化

[En]

I don’t feel like going into it for the time being. I’ll make it up when I come back after the project.

### 2.4 池化

[En]

Pooling is used to reduce the amount of feature data, maximum pooling can extract image texture, and mean pooling can retain background features.

[En]

The upper small square in the above picture is the maximum value pool, and the lower small square is the mean pool.

model = tf.keras.models.Sequential([
BatchNormalization(),
Activation('relu'),
Dropout(0.2),
])


### 2.5 舍弃

0.2表示随机舍弃掉20%的神经元。

### 2.7 Example1

CIFAR-10 是由 Hinton 的学生 Alex Krizhevsky 和 Ilya Sutskever 整理的一个用于识别普适物体的小型数据集。一共包含 10 个类别的 RGB 彩色图 片：飞机（ a叩lane ）、汽车（ automobile ）、鸟类（ bird ）、猫（ cat ）、鹿（ deer ）、狗（ dog ）、蛙类（ frog ）、马（ horse ）、船（ ship ）和卡车（ truck ）。图片的尺寸为 32×32 ，数据集中一共有 50000 张训练圄片和 10000 张测试图片。

example1就是对cifar10进行十分类。

import tensorflow as tf
from matplotlib import pyplot as plt
import numpy as np
cifar10 = tf.keras.datasets.cifar10

plt.imshow(x_train[0])
plt.show()


[En]

Then build a neural network, because it is a 10-classification problem, so we need an output layer containing ten neurons:

import tensorflow as tf
import os
import numpy as np
from matplotlib import pyplot as plt
from tensorflow.keras.layers import Conv2D, BatchNormalization, Activation, MaxPool2D, Dropout, Flatten, Dense
from tensorflow.keras import Model

np.set_printoptions(threshold=np.inf)
cifar10 = tf.keras.datasets.cifar10
x_train, x_test = x_train / 255.0, x_test / 255.0

class Baseline(Model):
def __init__(self):
super(Baseline, self).__init__()
self.b1 = BatchNormalization()
self.a1 = Activation('relu')
self.d1 = Dropout(0.2)

self.flatten = Flatten()
self.f1 = Dense(128,activation='relu')
self.d2 = Dropout(0.2)
self.f2 = Dense(10,activation='softmax')

def call(self,x):
x = self.c1(x)
x = self.b1(x)
x = self.a1(x)
x = self.p1(x)
x = self.d1(x)
x = self.flatten(x)
x = self.f1(x)
x = self.d2(x)
y = self.f2(x)
return y
model = Baseline()

loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy'])

checkpoint_save_path = "./checkpoint/Baseline.ckpt"
if os.path.exists(checkpoint_save_path + '.index'):

cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path,
save_weights_only=True,
save_best_only=True)

history = model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1,
callbacks=[cp_callback])
model.summary()

file = open('./weights.txt', 'w')
for v in model.trainable_variables:
file.write(str(v.name) + '\n')
file.write(str(v.shape) + '\n')
file.write(str(v.numpy()) + '\n')
file.close()

acc = history.history['sparse_categorical_accuracy']
val_acc = history.history['val_sparse_categorical_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']

plt.subplot(1, 2, 1)
plt.plot(acc, label='Training Accuracy')
plt.plot(val_acc, label='Validation Accuracy')
plt.title('Training and Validation Accuracy')
plt.legend()

plt.subplot(1, 2, 2)
plt.plot(loss, label='Training Loss')
plt.plot(val_loss, label='Validation Loss')
plt.title('Training and Validation Loss')
plt.legend()
plt.show()


## 三、经典网络复现

[En]

Previously, an unknown convolution neural network was used for 10 classification, and now all kinds of classical networks are reproduced to observe their differences in the results of 10 classification problems.

### 3.1 LeNet5

class LeNet5(Model):
def __init__(self):
super(LeNet5, self).__init__()
self.c1 = Conv2D(filters=6,kernel_size=(5,5))

self.a1 = Activation('sigmoid')
self.p1 = MaxPool2D(pool_size=(2,2),strides=2)

self.c2 = Conv2D(filters=16,kernel_size=(5,5),
activation='sigmoid')
self.p2 = MaxPool2D(pool_size=(2,2),strides=2)

self.flatten = Flatten()
self.f1 = Dense(120,activation='sigmoid')
self.f2 = Dense(84,activation='sigmoid')
self.f3 = Dense(10,activation='softmax')

def call(self,x):
x = self.c1(x)
x = self.a1(x)
x = self.p1(x)
x = self.c2(x)
x = self.p2(x)
x = self.flatten(x)
x = self.f1(x)
x = self.f2(x)
y = self.f3(x)
return y


### 3.2 AlexNet8

class AlexNet8(Model):
def __init__(self):
super(AlexNet8, self).__init__()
self.c1 = Conv2D(filters=96, kernel_size=(3, 3))
self.b1 = BatchNormalization()
self.a1 = Activation('relu')
self.p1 = MaxPool2D(pool_size=(3, 3), strides=2)

self.c2 = Conv2D(filters=256, kernel_size=(3, 3))
self.b2 = BatchNormalization()
self.a2 = Activation('relu')
self.p2 = MaxPool2D(pool_size=(3, 3), strides=2)

self.c3 = Conv2D(filters=384, kernel_size=(3, 3), padding='same',
activation='relu')

self.c4 = Conv2D(filters=384, kernel_size=(3, 3), padding='same',
activation='relu')

self.c5 = Conv2D(filters=256, kernel_size=(3, 3), padding='same',
activation='relu')
self.p3 = MaxPool2D(pool_size=(3, 3), strides=2)

self.flatten = Flatten()
self.f1 = Dense(2048, activation='relu')
self.d1 = Dropout(0.5)
self.f2 = Dense(2048, activation='relu')
self.d2 = Dropout(0.5)
self.f3 = Dense(10, activation='softmax')

def call(self, x):
x = self.c1(x)
x = self.b1(x)
x = self.a1(x)
x = self.p1(x)

x = self.c2(x)
x = self.b2(x)
x = self.a2(x)
x = self.p2(x)

x = self.c3(x)

x = self.c4(x)

x = self.c5(x)
x = self.p3(x)

x = self.flatten(x)
x = self.f1(x)
x = self.d1(x)
x = self.f2(x)
x = self.d2(x)
y = self.f3(x)
return y

model = AlexNet8()


### 3.6 总结

VGGNet，InceptionNet ，resnet 这三个网络均较为复杂，电脑配置低运行起来花费时间长，等以后有时间再详细研究，目前只是先粗略过一下tensorflow。

[En]

The design process and parameter adjustment process of sensory neural network is a metaphysical process, which may require a lot of study before we can learn to adjust parameters.

#### 四、参考

https://www.bilibili.com/video/BV1B7411L7Qt?p=42&spm_id_from=pageDriver

Original: https://blog.csdn.net/qq_45933509/article/details/124486124
Author: cqust_qilin02811
Title: tensorflow学习笔记 (五) (卷积神经网络)

(0)

### 大家都在看

• #### 在Unity中使用Vosk实现语音识别

在获得识别结果时注册回调。此回调提供语音识别结果字符串。 [En] register the callback when the recognition result is obt…

人工智能 2023年5月27日
0170
• #### 机器视觉——单目相机模型（坐标标定以及去畸变）

单目相机模型： 针孔相机模型的映射关系： 化为矩阵形式： 其中，中间的矩阵被称为相机的内参矩阵K。通常认为，相机的内参在出厂之后是固定的，不会在使用过程中发生变化。有点相机生产厂商…

人工智能 2023年6月21日
0155
• #### 安装python3.8+Anaconda3+Tensorflow

1.安装python3.8 python3.8.6下载网址 2.安装Anaconda3 Anaconda3官网下载地址 2.1根据自己的电脑系统选择对应的安装包下载 2.2点击下载…

人工智能 2023年5月25日
0181
• #### 关键词抽取方法

1、关键词提取 为了方便用户快速了解文章的中心主题，会抽取文章的一些中心词来表达文章的中心思想。关键词抽取就是通过一定的方法抽取出能表达文章的中心主题的一系列方法。 2、关键词抽取…

人工智能 2023年5月30日
0121
• #### 方面级情感分析（一）

方面级情感分析任务定义：方面级情感分析(Aspect-based sentiment analysis, ABSA)主要包括方面词抽取和方面级情感分类。ABSA任务需要识别出给定目…

人工智能 2023年5月28日
0124
• #### 点云PCL库学习-双目图像转化为点云PCD并显示

文章目录 双目视觉模型 代码实现 总结 参考文章 一、双目视觉模型 和RGBD相机主动发射光线实现测距不同，双目测距原理通过配置立体摄像头（通常由左眼相机和右眼相机两个水平放置的相…

人工智能 2023年5月26日
0164

人工智能 2023年7月14日
0134
• #### 基于奇异值分解的图像压缩matlab

话不多说上才艺 文章目录 * – 嘛是图像压缩🤷‍♂️ – + 聊聊图像格式🐱‍🐉 – 奇异值分解🎉 – + 特征值分解evd🎉 +…

人工智能 2023年6月18日
0207
• #### 度量学习——总结

传统方法 User guide: contents — metric-learn 0.6.2 documentation 深度学习 基于深度学习的度量学习方法大都由两个部分组成：特…

人工智能 2023年7月22日
0161
• #### 阵列信号处理——多重信号分类(MUSIC)

阵列信号处理分为波束形成和波达方向估计两大技术。波达方向估计的代表性方法是高分辨空间谱估计。功率谱密度描述信号功率随频率的分布，是信号的一种频域表示。由于阵列信号处理的主要任务是信…

人工智能 2023年7月3日
0133
• #### 【matlab图像处理】图像处理的经典操作

中国史之【文王推演《易经》】：《周易》即《易经》，传统经典之一，相传是周文王被囚禁期间所作，内容包括《经》和《传》两部分，中心思想是以阴阳的交替变化描述世间万物。《周易》是中国传统…

人工智能 2023年6月17日
0193
• #### 读书笔记-深度学习入门之pytorch-第四章（含卷积神经网络实现手写数字识别）（详解）

1、卷积神经网络在图片识别上的应用 （1）局部性：对一张照片而言，需要检测图片中的局部特征来决定图片的类别 （2）相同性：可以用同样的模式去检测不同照片的相同特征，只不过这些特征处…

人工智能 2023年7月23日
0130
• #### 文献阅读-Robsut Wrod Reocginiton via Semi-Character Recurrent Neural Network

题目：Robsut Wrod Reocginiton via Semi-Character Recurrent Neural Network作者：Keisuke Sakaguchi…

人工智能 2023年6月29日
0143
• #### 【吐血整理】超全golang面试题合集+golang学习指南+golang知识图谱+成长路线 一份涵盖大部分golang程序员所需要掌握的核心知识。

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

人工智能 2023年6月1日
0164
• #### 目标检测算法的分类和优缺点

随着今年来科学技术的发展，尤其是人工智能和大数据技术的不断发展，不断应用于生活中的各个领域，给人们的生活带来方便和便利，深度学习这门技术也是越来越重要，目标检测也是深度学习的一个应…

人工智能 2023年6月25日
0226
• #### 深度学习TensorFlow—保存和加载 Keras 模型

Keras简介 保存整个模型 保存模型的权重 Keras简介 Keras 模型由多个组件组成： 架构或配置，指定模型中包含的层及其连接方式。 [En] Architecture o…

人工智能 2023年5月23日
0133