本周作业分为两部分,一部分是keras的基本使用,另一部分是ResNet的构建。
Keras是TensorFlow的高层封装,可以更高效的实现神经网络的搭建。
先导入库
1 | import numpy as np |
构建模型
1 | def HappyModel(input_shape): |
然后实例化这个模型
1 | ### START CODE HERE ### (1 line) |
进行优化器和loss的选择
1 | ### START CODE HERE ### (1 line) |
训练
1 | ### START CODE HERE ### (1 line) |
预测:
1 | ### START CODE HERE ### (1 line) |
可以用summary()来看看详细信息:
1 | happyModel.summary() |
1 | _________________________________________________________________ |
用plot_model()来得到详细的graph
1 | plot_model(happyModel, to_file='HappyModel.png') |
主要有两个步骤:
这一部分非常深的神经网络的一些问题,主要是参数会变得很小或者爆炸,这样子训练的时候就会收敛的很慢,因此,用残差网络可以有效的改善这个问题。
根据输入输入的维度不同,分为两种块:
1. identity block(一致块)
可以看到,identity block的前后两端维度是一致的,可以直接相加。
在这里我们实现了一个跳跃三层的块。
基本结构是:
First component of main path:
conv_name_base + '2a'
. Use 0 as the seed for the random initialization.bn_name_base + '2a'
.Second component of main path:
conv_name_base + '2b'
. Use 0 as the seed for the random initialization.bn_name_base + '2b'
.Third component of main path:
conv_name_base + '2c'
. Use 0 as the seed for the random initialization.bn_name_base + '2c'
. Note that there is no ReLU activation function in this component.Final step:
注意在跳跃相加部分要用函数keras的函授Add(),不能用加号,不然会出错。
这里f是卷积核的大小,filters是这三层卷积层的深度的list,stage指的是哪一大层的网络,用来取名字的,后面有用,block是在stage下的某一层的网络,用a,b,c,d等字母表示。
1 | # GRADED FUNCTION: identity_block |
2. The convolutional block(卷积块)
当两端的维度不一致时,可以加一个卷积核来转化维度,这时候没有激活函数。
First component of main path:
conv_name_base + '2a'
.bn_name_base + '2a'
.Second component of main path:
conv_name_base + '2b'
.bn_name_base + '2b'
.Third component of main path:
conv_name_base + '2c'
.bn_name_base + '2c'
. Note that there is no ReLU activation function in this component.Shortcut path:
conv_name_base + '1'
.bn_name_base + '1'
.Final step:
这里参数新增了s是stride每一步数
1 | def convolutional_block(X, f, filters, stage, block, s = 2): |
构建一个50层的网络,分为5块,结构如下:
The details of this ResNet-50 model are:
'fc' + str(classes)
.Exercise: Implement the ResNet with 50 layers described in the figure above. We have implemented Stages 1 and 2. Please implement the rest. (The syntax for implementing Stages 3-5 should be quite similar to that of Stage 2.) Make sure you follow the naming convention in the text above.
You’ll need to use this function:
1 | # GRADED FUNCTION: ResNet50 |