Keras:seq2seq模型的训练数据格式
我正在尝试在Keras中构建一个编码器-解码器体系结构,用于训练(多对多)序列模型 我要做的是一个模型,它可以输入一些可变长度的文本,比如一篇新闻文章,并输出该文本的摘要(也是可变长度的) 我的模型如下所示:Keras:seq2seq模型的训练数据格式,keras,Keras,我正在尝试在Keras中构建一个编码器-解码器体系结构,用于训练(多对多)序列模型 我要做的是一个模型,它可以输入一些可变长度的文本,比如一篇新闻文章,并输出该文本的摘要(也是可变长度的) 我的模型如下所示: # Encoder model.add(Embedding(NUM_WORDS + 1, EMBEDDING_SIZE, input_length=MAX_SEQUENCE_LENGTH, mask_zero=True)) model.add(LSTM(HIDDEN_SIZE)) mode
# Encoder
model.add(Embedding(NUM_WORDS + 1, EMBEDDING_SIZE, input_length=MAX_SEQUENCE_LENGTH, mask_zero=True))
model.add(LSTM(HIDDEN_SIZE))
model.add(RepeatVector(MAX_SEQUENCE_LENGTH))
# Decoder
for _ in range(NUM_LSTM_LAYERS):
model.add(LSTM(HIDDEN_SIZE, return_sequences=True))
model.add(TimeDistributed(Dense(MAX_SEQUENCE_LENGTH)))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
model.fit(X_train, Y_train, epochs=NUM_EPOCHS)
我认为这是对的。我正在按如下方式预处理输入数据:
with open('data.csv', 'r') as csvfile:
dataset = csv.DictReader(csvfile, delimiter=';')
texts = []
X = []
Y = []
for row in dataset:
texts.append(row['data'])
texts.append(row['label'])
X.append(row['data'])
Y.append(row['label'])
tokenizer = Tokenizer(num_words=NUM_WORDS, lower=True, split=" ")
tokenizer.fit_on_texts(texts)
X_sequences = tokenizer.texts_to_sequences(X)
Y_sequences = tokenizer.texts_to_sequences(Y)
X_train = pad_sequences(X_sequences, maxlen=MAX_SEQUENCE_LENGTH)
Y_train = pad_sequences(Y_sequences, maxlen=MAX_SEQUENCE_LENGTH)
换句话说,像“敏捷的棕色狐狸跳过了懒惰的狗”这样的序列被转换成一个数字序列[1,2,3,4,5,6,1,7,8]
,然后填充:[0,0,0,…0,1,2,3,4,5,6,1,7,8]
。目标数据(Y\u train
)的转换方式类似
当我尝试训练模型时,我得到以下错误:ValueError:检查目标时出错:预期激活\u 1有3个维度,但得到了形状为(3200)的数组。
。我怀疑这是因为TimeDistributed(densite(MAX_SEQUENCE_LENGTH))
产生了一个3D输出,但我不确定如何格式化Y_train
数据来解决这个问题