Verified Commit dd9a1c4f authored by Kiryuu Sakuya's avatar Kiryuu Sakuya 🎵
Browse files

Upload 05

parent 2b636bbd
# 第5关:VGGNet 模型输入的预处理
## 任务描述
本关任务:编写一个能预处理图片的矩阵形式的输入的函数。其实这本来属于预处理的一部分,但并不是数据增强,比较接近归一化。我有考虑过放在前面数据预处理部分,但是这个是 VGGNet 里使用的,单列一关也不好取名字;然后也有考虑过放到后面的 VGGNet 的模型搭建中,但是这样模型那一关就太麻烦了。所以就还是单独列一关,放到这里。
## 相关知识
为了完成本关任务,你需要掌握:
1. 预处理图片矩阵:每个像素点减去该图片对应的通道的均值
### 预处理图片矩阵
`np.mean()` 配合参数 axis 的使用即可完成该操作。axis 可以指定在哪一维上做求均值,直观上,返回的矩阵,指定的维就会消失,这个可能比较抽象,直接实践一下会比较容易理解。
VGGNet 之所以有这一步,其实就跟最大最小归一化一样,都是为了是网络更容易收敛。
如果待处理的矩阵形状为 X×Y×3:
axis=0,代表第一维,即把 X(行)消除了,所以返回的是每一列 RGB 的均值,形状是 Y×3。
axis=1, 代表第二维,即把 Y(列)消除了,所以返回的是全图的 RGB 的均值,形状是 3。
示例如下,最好动笔算一下
```python
a = np.array([[[1,2,3],[4,5,6],[1,1,1]],
[[7,8,9],[10,11,12],[2,2,2]],
[[13,14,15],[16,17,18],[3,3,3]]])
rgbMean = np.mean(a, axis=0)
print('axis = 0')
print(rgbMean)
print(rgbMean.shape)
print('axis = (0,1)')
rgbMean = np.mean(a,axis=(0,1))
print(rgbMean)
print(rgbMean.shape)
print('subt\fract')
print(a-rgbMean)
```
输出:
```
---axis = 0---
[[ 7. 8. 9.]
[10. 11. 12.]
[ 1. 2. 3.]]
(3, 3)
---axis = (0,1)---
[6. 7. 8.]
(3,)
---subt\fract---
[[[-5. -5. -5.]
[-2. -2. -2.]
[-5. -6. -7.]]
[[ 1. 1. 1.]
[ 4. 4. 4.]
[-4. -5. -6.]]
[[ 7. 7. 7.]
[10. 10. 10.]
[-6. -4. -2.]]]
```
## 测试说明
平台会对你编写的代码进行测试:
测试输入会是任意的 X×Y×3 型的矩阵,正确的输出应该是经过每个值减去了对应通道的均值后的值。平台会判定你写的函数的输出是否和正确处理保持一致,如果是一致的,则正确。
---
开始你的任务吧,祝你成功!
## 答案
`VGGPreprocessComplete.py`
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment