使用函数式API构建神经网络
函数式API相比于keras.Sequential()具有更加灵活多变的特点。
函数式API主要应用于多输入多输出的网络模型。
利用函数式API构建神经网络主要分为3步,1.构建输入层,2.构建中间层与输出层并连接神经层,3.生成神经网络模型。
1.构建输入层
输入层的构建较为简单,调用keras.Input()方法来构建输入层。
1 input = keras.Input(shape = (28, 28))
shape参数是输入数据的形状(这里输入的是一个28*28的二维数据)。
2.构建中间层与输出层并连接神经层
上一篇博客中有提到过,输出层与中间层的差别主要在于激活函数/分类器的选用上,其他部分大致相同,所以这里放在一起讲。
函数式API是把神经网络层作为函数相互调用以达到连接神经层变成神经网络的目的。
可以在构建神经层的时候直接连接,其结构与Sequential模型相似。
1 x = keras.layers.Flatten()(input) #调用函数式API 2 x = keras.layers.Dense(32, activation = "relu")(x) 3 x = keras.layers.Dropout(0.5)(x) 4 x = keras.layers.Dense(64, activation = "relu")(x) 5 output = keras.layers.Dense(10, activation = "softmax")(x)
或者是先构建神经层,再按照自己需要的顺序相连。
1 a = keras.layers.Flatten()(input) 2 b = keras.layers.Dense(32, activation = "relu") 3 b = b(a) 4 c = keras.layers.Dropout(0.5) 5 c = z(b) 6 d = keras.layers.Dense(64, activation = "relu") 7 d = d(c) 8 output = keras.layers.Dense(10, activation = "softmax") 9 output = output(d)
不难看出,使用函数式API相对繁琐,但是能看出它的灵活性远高于Sequential模型。
3.生成神经网络模型
使用keras.Model()方法生成网络模型
1 model = keras.Model(inputs = input, outputs = output)
参数分别是神经网络的输入和输出层。
最后使用.compile()方法和.fit()方法确定模型训练流程并训练即可。