gpt4 book ai didi

python - 当我提供一维列表作为输入时,为什么 Keras 会崩溃?

转载 作者:行者123 更新时间:2023-11-30 09:44:43 24 4
gpt4 key购买 nike

我刚刚开始使用 Keras,所以我想尝试提出我能想到的最简单的回归问题,就像一种 Hello World。

我正在尝试训练一个输出双倍输入的模型。我想一个有两个节点(1 个输入 1 个输出)且没有激活函数的网络应该可以解决问题。权重应该简单地收敛到 2。

这是我的代码:

layers = keras.layers

# Feed forward structure
model = keras.Sequential()

model.add(layers.Dense(1))

model.add(layers.Dense(1))

model.compile(optimizer=tf.train.AdamOptimizer(0.01),
loss='mae',
metrics=['mae'])


train_data = np.asarray([x for x in range(100)])
train_labels = np.asarray([x * 2 for x in train_data])


model.fit(train_data, train_labels, epochs=50, batch_size=32)

但是,当我向它提供一维 numpy 数组时,它会崩溃并出现以下错误:

ValueError: The last dimension of the inputs to `Dense` should be defined. Found `None`.

如果我向 train_data 添加冗余括号,它会编译(不收敛):

train_data = np.asarray([[x for x in range(100)]])

Epoch 50/50

1/1 [==============================] - 0s 705us/step - loss: 50.0463 - mean_absolute_error: 50.0463

最佳答案

如果您为模型指定一个数字,则每个输入样本的形状必须为 (1,)。因此,所有 100 个输入样本的形状均为 (100,1)。因此,您需要使输入数据和标签的形状与预期一致:

train_data = train_data.reshape(100,1)  # 100 samples of shape 1

# you may not need to do the following necessarily
train_labels = train_labels.reshape(100,1) # 100 labels of shape 1

# alternative way using np.expand_dims
train_data = np.expand_dims(train_data, axis=-1)

旁注:

  1. 您的模型有两个Dense层。根据您提供的描述,我认为您只需要一个具有一个密集层的模型,该层有一个单元(即删除其中一个密集层)。

  2. 当您将数据放入另一个列表时,如下所示:

    train_data = np.asarray([[x for x in range(100)]])

    它将成为形状 (1,100) 的二维数组,这意味着形状 (100,)一个样本,这不是您想要的正在寻找。

关于python - 当我提供一维列表作为输入时,为什么 Keras 会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54053406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com