我正在尝试在Keras(tf后端)上的序列列表(长度可变)上训练我的GRU模型,并将我的时间步长设为1 [我的代码段如下]。
但是,当我尝试使用sparse_categorical_crossentropy损失进行编译时,我在最后一层的预期输出与训练标签的形状之间遇到了形状错误。此外,我什至无法将训练标签重塑为[1(batch_size),sequence_length,1503(序列的每个步骤中的标签数目有限)]。
P.S。。我不希望对标签进行一键编码并使用categorical_crossentropy来编译模型。
def data_gen(mt):
i=0
while True:
#for i in range(len(mt)):
x_train=np.reshape(np.array(mt[i][:-1]),(1,-1,1))
y_train=np.reshape(np.array(mt[i][1:]),(1,-1))
#y_train=np.reshape(to_categorical(y_train, num_classes=len(lab)),(len(y_train),len(lab)))
yield x_train, y_train
i=(i+1)%len(mt)
def get_model(lab):
model=Sequential()
#model.add(Embedding(len(lab), 16, input_length=ts, batch_input_shape=(1,ts)))
#model.add(Masking(mask_value=0., batch_input_shape=(1,ts,1)))
model.add(GRU(1, implementation=1, activity_regularizer=regularizers.l1(0.01), return_sequences=True, input_shape=(None, 1)))
#IS THE ERROR IN THE FOLLOWING LINE??
model.add(TimeDistributed(Dense(len(lab), activation='softmax')))
#model.add(Flatten(input_shape=(1, 1, 1)))
#model.add(Dense(len(lab), activation='softmax'))
print(model.summary())
model.compile(loss='sparse_categorical_crossentropy',
optimizer='Nadam', metrics = ['sparse_categorical_accuracy'])
return model
model=get_model(lab)
model.fit_generator(data_gen(mt), steps_per_epoch=len(mt), epochs=10, verbose=1)