python深度学习第七章----高级的深度学习最佳实践
7.1 不用Sequential模型的解决方案
Sequential模型的特点:
1.只有一种输入
例如,我们要同时处理文本数据(全连接层),图片数据(2D卷积层),就不能使用Sequential模型,我们就需要多模态输入,例如,我们的输入数据为元数据,文本描述,图片,来预测一个一个商品的价格,我们就可以将Dense模块,RNN模块,卷积神经网络模块结合起来
2.一种输出
例如,给定一部小说,我们将要他归类,还要预测其写作时间,这时就要两个输出,一个输出用来判别其类别,另一种输出来预测其写作时间
函数式API
from keras.models import Sequential,Model
from keras import layers
from keras import Input
# 之前学习过的Sequential模型
seq_model = Sequential()
seq_model.add(layers.Dense(32,activation = 'relu',input_shape = ((64,))))
seq_model.add(layers.Dense(32,activation = 'relu'))
seq_model.add(layers.Dense(10,activation = 'softmax'))
seq_model.summary()
# 对应的函数式API实现
input_tensor = Input(shape = (64,))
x = layers.Dense(32,activation = 'relu')(input_tensor)
x = layers.Dense(32,activation = 'relu')(x)
output_tensor = layers.Dense(10,activation = 'softmax')(x)
# 后台检索,从输入张量一直到输出张量,检索其每一层,检测输入张量,经过一系列变换,到达输出张量
model = Model(input_tensor,output_tensor)
model.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_4 (Dense) (None, 32) 2080
_________________________________________________________________
dense_5 (Dense) (None, 32) 1056
_________________________________________________________________
dense_6 (Dense) (None, 10) 330
=================================================================
Total params: 3,466
Trainable params: 3,466
Non-trainable params: 0
_________________________________________________________________
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 64) 0
_________________________________________________________________
dense_7 (Dense) (None, 32) 2080
_________________________________________________________________
dense_8 (Dense) (None, 32) 1056
_________________________________________________________________
dense_9 (Dense) (None, 10) 330
=================================================================
Total params: 3,466
Trainable params: 3,466
Non-trainable params: 0
_________________________________________________________________
多输入模型
举例:一个问答问题,输入为一个问题和所有问题的文本数据集合,输出为一个回答
from keras.models import Model
from keras import layers
from keras import Input
import keras
text_vocabulary_size = 10000
question_vocabulary_size = 10000
answer_vocabulary_size = 500
# 第一个输入
text_input = Input(shape = (None,),dtype = 'int32',name = 'text') #文本输入是一个长度可变的整数序列
embedded_text = layers.Embedding(text_vocabulary_size,64)(text_input)
encode_text = layers.LSTM(32)(embedded_text)
# 第二个输入
question_input = Input(shape = (None,),dtype = 'int32',name