共计 810 个字符,预计需要花费 3 分钟才能阅读完成。
序列模型的好处就是简单易理解,上一篇文章介绍了序列模型的简单使用模型定义序列模型
但是函数式模型定义会让你定义模型更加灵活。为什么称之为函数式,是因为你发现你在定义网路的时候就是在写各种函数的调用,所以看起来就是不断调用的函数来操作神经网络。
先看一个简单的例子(来源keras官网)
from keras.layers import Input, Dense
from keras.models import Model
# 这部分返回一个张量
inputs = Input(shape=(784,))
# 层的实例是可调用的,它以张量为参数,并且返回一个张量
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
predictions = Dense(10, activation='softmax')(x)
# 这部分创建了一个包含输入层和三个全连接层的模型
model = Model(inputs=inputs, outputs=predictions)
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(data, labels) # 开始训练
与序列模型不一样的是:
- 序列在第一层网络中定义输入的大小,现在是直接给出Input层的输入。
- 序列模型每一层之间不需要指定输入,都是自动推导的,现在函数式定义需要指定
还有一点使用函数式的API就是你要获取任意中间层的数据会变得相对简单一点,不然你使用的序列模型是要去get指定网络层的input和output,在函数式里面,直接获取对应的层的输出变量即可。
所以函数式模型定义的主要流程:
- 指定Input
- 定义中间网络层处理
- 得到Output
- compile和fit数据
下一节继续讲解函数式灵活的一些实际应用。
正文完
请博主喝杯咖啡吧!