Keras - 使用TensorFlow后端形成张量问题

时间:2017-06-06 20:15:35

标签: python tensorflow deep-learning classification keras

我正在尝试将TensorFlow脚本转换为Keras。我有一个分类模型,可以预测数字和4位数的存在。我有两个不同的损失和两个输出:一个用于存在,一个用于数字。

这是我的模特:

def get_training_model2():
    inp, x = convolutional_layers2()
    x = Flatten()(x)
    x = Dense(2048)(x)
    x = Activation('relu')(x)
    y = Dense(1+5*len(DIGITS), activation='softmax')(x)
    out1 = Lambda(lambda a: a[:,:1])(y)
    out2 = Lambda(lambda a: a[:,1:])(y)
    model = Model(inp, [out1, out2])
    return model

这是我的数字损失:

def digits_loss(y_true, y_pred):
    digits_loss = losses.sparse_categorical_crossentropy(K.reshape(y_true, [-1, len(DIGITS)]),
                                                         K.reshape(y_pred, [-1, len(DIGITS)]))
    digits_loss = np.sum(digits_loss)
    return digits_loss

# Target    
target = [y_train[:,:1],  y_train[:,1:]]

当我发布时:

model = model_keras.get_training_model2()
opt = Adam(lr=learn_rate)
model.compile(loss=[presence_loss, digits_loss],
              optimizer=opt,
              metrics=['accuracy'])

model.fit(X_train, target, batch_size=50,
          epochs=50 ...)

我有这个错误:

File "train_keras.py", line 96, in digits_loss
    K.reshape(y_pred, [-1, len(DIGITS)]))
logits and labels must have the same first dimension, got logits shape [250,11] and labels shape [2750]

我不明白为什么会出现这个错误,因为我正在以同样的方式重塑标签和logits。此外,我不明白为什么形状为[250,11],尽管它应该是[50,11](batch_size)。
谢谢你的帮助。

0 个答案:

没有答案