Keras复杂网络的搭建
概述
在我们刚接触keras时候用的都是用的Sequential模型实现的,但是这种网络只能有一个输入和一个输出,如果我们要搭建多模态的网络(多输入多输出,层与层之间的跨越连接等)就要用keras函数式API了。
Sequential To 函数API
函数式API就是建立一个层,接受张量并返回张量。我们俩看看Sequential模型以及对应的函数式API实现
from keras.models import Sequential, Model
from keras import layers
from keras import Input
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'))
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()
多输入模型
典型的问答模型有两个输入:一个自然语言描述的问题和一个文本片段(比如新闻文章),后者提供用于回答问题的信息。然后模型要生成一个回答,在最简单的情况下,这个回答只包含一个词,可以通过对某个预定义的词表做softmax 得到。
from keras.models import Model
from keras import layers
from keras import Input
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)
encoded_text = layers.LSTM(32)(embedded_text)
#问题
question_input = Input(shape=(None,),
dtype='int32',<