训练标签在Keras GRU中训练可变长度序列中的形状错误

时间:2019-11-20 23:22:05

标签: python keras recurrent-neural-network

我正在尝试在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)

0 个答案:

没有答案