{
"registry-mirrors": [
"https://docker.m.daocloud.io"
]
}
[……]
简单示例,一个用 CNN 识别 MNIST 手写数字的模型。数据是 60,000 张训练和 10,000 张测试的 28×28 灰度图,先归一化到 0-1,再加通道。模型用两层卷积(32 和 64 个滤波器)提取特征,两层池化缩小尺寸,再展平后用两个全连接层(128 和 10 个神经元)输出概率。训练 5 轮,用 adam 优化,损失是交叉熵。
import tensorflow as tf
import numpy as np
# 1. 加载MNIST 数据集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.l[......]
展平与全连接得到特征值
import numpy as np
# 1、定义输入图片:4x4的图片,0表示白色,1表示黑色
image = np.array([
[0, 0, 1, 1],
[0, 0, 1, 1],
[1, 1, 0, 0],
[1, 1, 0, 0]
])
print('输入图片: \n', image)
# 2、卷积:用2x2滤波找对角特征
filter_simple = np.array([
[1, 0],
[0, 1]
])
print('滤波器: \n', filter_simple)
# 计算卷积结果
con[......]
矩阵是图像在计算机中的一种表示方式
import numpy as np
import matplotlib.pyplot as plt
image = np.array([
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
])
print('图片矩阵:\n', image)
plt.imshow(image, cmap='gray')
plt.title('Simple Image')
plt.axis('off')
plt.[......]
池化的目的是采样,减少计算量
import numpy as np
feature_map = np.array([
[1, 1, 1, 1],
[1, 1, 1, 1],
[2, 2, 2, 2],
[2, 2, 2, 2]
])
print('特征图:\n', feature_map)
pooled = np.zeros((2, 2))
for i in range(0, 4, 2):
for j in range(0, 4, 2):
pooled[i // 2, j // 2] = np.max(feature_map[i[......]