Seq2Seq_keras:关于encoder_model和decoder_model
一、三个model
(一)Seq2Seq之前的keras model:
1、创建模型
# 多层感知机(MLP)模型
from keras.models import Model
from keras.layers import Input, Dense
from keras.utils import plot_model
mnist_input = Input(shape=(784,), name='input')
hidden1 = Dense(512, activation='relu', name='hidden1')(mnist_input)
hidden2 = Dense(216, activation='relu', name='hidden2')(hidden1)
hidden3 = Dense(128, activation='relu', name='hidden3')(hidden2)
output = Dense(10, activation='softmax', name='output')(hidden3)
model = Model(inputs=mnist_input, outputs=output)
# 打印网络结构
model.summary()
model.save(r"xxx.h5")
# 產生網絡拓撲圖
plot_model(model, to_file='模型.png')

2、模型预测
model = load_model(r"xxx.h5")
model.predict()
(二)Seq2Seq的keras model
完整代码链接: 十分钟介绍 Keras 中的序列到序列学习.
此处会有三个模型需要进行保存
1.训练模型:
from keras.models import Model
from keras.layers import Input, LSTM, Dense
# Define an input sequence and process it.
encoder_inputs = Input(shape=(None, num_encoder_tokens))
encoder = LSTM(latent_dim, return_state=True)
encoder_outputs, state_h, state_c = encoder(encoder_inputs)
# We discard `encoder_outputs` and only keep the states.
encoder_states = [state_h, state_c]
# Set up the decoder, using `encoder_states` as initial state.
decoder_inputs = Input(shape=(None, num_decoder_tokens))
# We set up our decoder to return full output sequences,
# and to return internal states as well. We don't use the
# return states in the training model, but we will use them in inference.
decoder_lstm = LSTM(latent_dim, return_sequences=True, return_state=True)
decoder_outputs, _, _ = decoder_lstm(decoder_inputs,
initial_state=encoder_states)
decoder_dense = Dense(num_decoder_tokens, activation='softmax')
decoder_outputs = decoder_dense(decoder_outputs)
# Define the model that will turn
# `encoder_input_data` & `decoder_input_data` into `decoder_target_data`
model = Model([encoder_inputs, decoder_inputs], decoder_outputs)
2.推理模型
2.1编码模型
encoder_model = Model(encoder_inputs, encoder_states)
2.2解码模型
decoder_state_input_h = Input(shape=(latent_dim,))
decoder_state_input_c = Input(shape=(latent_dim,))
decoder_states_inputs = [decoder_state_input_h, decoder_state_input_c]
decoder_outputs, state_h, state_c = decoder_lstm(
decoder_inputs, initial_state=decoder_states_inputs)
decoder_states = [state_h, state_c]
decoder_outputs = decoder_dense(decoder_outputs)
decoder_model = Model(
[decoder_inputs] + decoder_states_inputs,
[decoder_outputs] + decoder_states)
总共三个模型!!!!!
初见,抓狂!!!
里面的lstm,state_h, state_c已经特别难理解了,后面还要三个模型,于是放弃治疗了。
二、再次遇见seq2seq
理解seq2seq有几个难点
难点一:lstm
通过可视化的操作理解了lstm

可视化的理解链接: LSTM这一篇就够了.
难点二:return_sequences和return_state
return_sequences:即返回序列,若为True,则返回每一个序列
要理解这一点,首先要明白rnn的基本原理
以自然语言处理为例:
1、我们的输入通常为字符级即一个一个字输入rnn中,
正常来说每个输入就有一个输出。
2、但是在文本分类或者情感分类中,
我们得到的结果为几个类别,如积极、消极,
从字符上来说明显不对应
3、这就是因为return_sequences=False的结果,
因为RNN会将预测的每个输入作为下一个输入的一起进行输入,
即输入为[y(上一个x的输出),x(当前输入)]
如下图:

return_sequences=True
就是每个时间步也就是每个x的y都输出来
如下文实验所展示的:



而return_state则为计算每一个时间步的y即return_sequences的计算方式
如下文实验

本文详细解读了Keras中的Seq2Seq模型,涉及MLP模型、LSTM的使用、return_sequences和return_state概念,以及三个模型的关系。通过实例和可视化,深入剖析了编码器与解码器的工作原理和关键参数设置。
最低0.47元/天 解锁文章
1956

被折叠的 条评论
为什么被折叠?



