Keras中有两种不同的模型:序列模型(Sequential)和通用模型(Model)
一.序列模型(Sequential)
序列模型的两种创建方式:list构造和add()构造
1.1 list构造
通过向Sequential模型传递一个layer的list来构造该模型:
from keras.models import Sequential
from keras.layers import Dense, Activation
layers = [Dense(32, input_shape = (784,)),
Activation('relu'),
Dense(10),
Activation('softmax')]
model = Sequential(layers)
1.2 add()构造
通过add逐层向Sequential中添加layer
from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential() # 定义模型
model.add(Dense(units=64, activation='relu', input_dim=100)) # 定义网络结构
model.add(Dense(units=10, activation='softmax')) # 定义网络结构
model.compile(loss='categorical_crossentropy', # 定义loss函数、优化方法、评估标准
optimizer='sgd',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5, batch_size=32) # 训练模型
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128) # 评估模型
classes = model.predict(x_test, batch_size=128) # 使用训练好的数据进行预测
二.通用模型(Model)
from keras.layers import Input, Dense
from keras.models import Model
# 输入层,确定输入维度
input = input(shape = (784, ))
# 2个隐含层,每个都有64个神经元,使用relu激活函数,且由上一层作为参数
x = Dense(64, activation='relu')(input)
x = Dense(64, activation='relu')(x)
# 输出层
y = Dense(10, activation='softmax')(x)
model = Model(inputs=input, outputs=y)
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(data, labels)
注意⚠️,在新版的keras中model = Model(inputs=input, outputs=y)
中的inputs和outpus不再是之前的input和output,注意加s!
优点:
- 1、 每个layer实例都是可以调用的,它返回一个tensor
- 2、 输入tensor和输出tensor可以用来定义一个Model
- 3、 函数式的模型也可以像 Sequential模型一样训练。