首页 > 解决方案 > 仅在添加验证选项时发生错误:Numpy 数组不是模型预期的大小

问题描述

奇怪的是我得到了这个“检查模型输入错误:您传递给模型的 Numpy 数组列表不是模型预期的大小。” 仅当我添加验证数据集选项时(如果我删除此代码中的验证部分,它会起作用)。
显然,输入(据我所知)合适的验证数据形状以及训练数据集。我刚刚输入了与训练数据集完全相同形式的验证数据集。

训练/验证输入形式如下。

partial_x_train / partial_estendo / partial_y_train : (7000,1) numpy 数组 x_val / estendo_val / y_val : (3000,1) numpy 数组

我已经尝试过的(2种方式)

1)stackoverflow 中的另一篇文章建议在 keras 模型无法识别非 numpy 数组输入的情况下使用“np.array()”。但是,在我的情况下它不起作用。我不认为这对我来说是解决方案。

2)我认为这主要是由于括号不正确。所以我只是试图改变那部分。但它们都不起作用。(即使我输入训练数据集作为验证数据集)

----------skip : 只是创建数据集 ------------

def create_mean(inputs):
    x = inputs
    x = Dense(100, activation='relu')(x)
    x = Dense(1, activation='linear', name='mean_output')(x)
    return x


def create_std(inputs):
    x = inputs
    x = Dense(100, activation='relu')(x)
    x = Dense(1, activation='softplus', name='var_output')(x)
    return x


def generatesecmodel(name):
    inputs = keras.Input(shape=(second_input,))
    mean_branch = create_mean(inputs)
    var_branch = create_std(inputs)
    label_mean = Input(shape=(1,))
    model2 = Model(inputs=[inputs, label_mean], outputs=[mean_branch, var_branch])

    loss = 0.5 * K.log(var_branch + 1e-6) + 0.5 * K.square(label_mean - mean_branch) / (var_branch + 1e-6)

    model2.add_loss(loss)
    optimizer = optimizers.Adam(lr=0.1)
    model2.compile(optimizer=optimizer, loss=None)

    model2.fit([np.concatenate((partial_estendo, partial_x_train), axis=1), partial_y_train], epochs=num_epochs,
               batch_size=batch_size, validation_data=([np.concatenate((estendo_val, x_val), axis=1), y_val]))


model = generatesecmodel('test')

错误消息如下 ValueError:检查模型输入时出错:您传递给模型的 Numpy 数组列表不是模型预期的大小。预计会看到 2 个数组,但得到了以下 1 个数组的列表:[array([[ 1.60455704e-04, -9.37487497e-01], [ 9.99757528e-01, 1.45345668e-01], [ 9.99548554 e-01, 2.66093564e-02], ..., [ 9.98771310e-01, -1.19436635e-01], [ 6.7000...

标签: pythonnumpykerasdeep-learning

解决方案


推荐阅读