keras函数式API——多输入模型(问答模型)

在这里插入图片描述

# coding: utf-8
from tensorflow.keras.models import Model
from tensorflow.keras import layers
from tensorflow.keras import Input
import numpy as np
from tensorflow.keras.utils import to_categorical


text_vocabulary_size = 10000
question_vocabulary_size = 10000
answer_vocabulary_size = 500

# --------------将输入嵌入长度64的向量--------------------------------
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) # 利用LSTM将向量编码为单个向量

# -------------问题层实例化---------------------------------------------
question_input = Input(shape=(None, ), dtype='int32', name='question')

embedded_question = layers.Embedding(question_vocabulary_size, 32)(question_input)

encoded_question = layers.LSTM(16)(embedded_question)

# --------------连接文本和问题------------------------------------------
concatenated = layers.concatenate([encoded_text, encoded_question], axis=-1)

# -------------添加一个softmax分类器--------------------------------------
answer = layers.Dense(answer_vocabulary_size, activation='softmax')(concatenated)

# -------------模型实例化--------------------------------------------------
model = Model([text_input, question_input], answer) # 指定两个输入和输出
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['acc'])

model.summary()

"""将数据输入到模型中进行训练"""
num_samples = 1000
max_length = 100

text = np.random.randint(1, text_vocabulary_size, size=(num_samples, max_length))

question = np.random.randint(1, question_vocabulary_size, size=(num_samples, max_length))

answers = np.random.randint(answer_vocabulary_size, size=num_samples)
answers = to_categorical(answers, answer_vocabulary_size) # one-hot化

# ----------------------使用输入组成的列表来拟合--------------------------
model.fit([text, question], answers,epochs=10, batch_size=128)

# ----------------------使用输入组成的字典拟合----------------------------
# model.fit({'text': text, 'question': question}, answers, epochs=10, batch_size=128)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值