ValueError:检查输入时出错:预期的dense_26_input具有形状(45781,)但得到的数组具有形状(2,)

Posted

技术标签:

【中文标题】ValueError:检查输入时出错:预期的dense_26_input具有形状(45781,)但得到的数组具有形状(2,)【英文标题】:ValueError: Error when checking input: expected dense_26_input to have shape (45781,) but got array with shape (2,) 【发布时间】:2019-08-21 00:34:01 【问题描述】:

我的输入只是一个包含 45781 行和两列的 csv 文件。我正在尝试在神经网络上训练我的数据,但是当我尝试拟合模型时,它会抛出一个错误。

ValueError: Error when checking input: expected dense_26_input to have shape (45781,) but got array with shape (2,)

我尝试实施此链接给出的解决方案:

Error when checking model input: expected lstm_1_input to have 3 dimensions, but got array with shape (339732, 29)

但我仍然无法运行代码。这是我的代码:

X = df.iloc[:, 0:2].values
y = df.iloc[:, 2].values

df_sklearn = df.copy()

lb_make = LabelEncoder()
df_sklearn['Type'] = lb_make.fit_transform(df['Type'])
df_sklearn.head() #Results in appending a new column to df

df_onehot = df.copy()
df_onehot = pd.get_dummies(df_onehot, columns=['Type'], prefix = ['Type'])

df_onehot_sklearn = df.copy()

lb = LabelBinarizer()
lb_results = lb.fit_transform(df_onehot_sklearn['Type'])
lb_results_df = pd.DataFrame(lb_results, columns=lb.classes_)

result_df = pd.concat([df_onehot_sklearn, lb_results_df], axis=1)


X_train, X_test, y_train, y_test = train_test_split(X, lb_results_df, test_size = 0.4)

classifier = Sequential()
classifier.add(Dense(output_dim = 6, init = 'uniform', activation = 'relu', input_dim = 45781))
classifier.add(Dense(output_dim = 6, init = 'uniform', activation = 'relu'))
classifier.add(Dense(output_dim = 1, init = 'uniform', activation = 'sigmoid'))
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

classifier.fit(X_train, y_train, batch_size = 10, nb_epoch = 100)

【问题讨论】:

【参考方案1】:

这些行通常是您的训练示例,模型希望您省略此维度。因此,如果有 45781 个示例,每个示例有 2 列,则 input_dim 应为 2。此外,如果您正在堆叠层,则可以省略 output_dim 参数,但您必须指定单位(神经元数量)。

最后一个 Dense Layer 需要与 y 的维度具有相同数量的神经元(在您的情况下为 20)。

下面是一个带有虚拟数据的示例:

X_train = np.random.random((300,2))
y_train = np.random.random((300,20))

classifier = Sequential()
classifier.add(Dense(units = 6, init = 'uniform', activation = 'relu', input_dim = 2))
classifier.add(Dense(units = 6, init = 'uniform', activation = 'relu'))
classifier.add(Dense(units = 20, init = 'uniform', activation = 'sigmoid'))
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
classifier.summary()

classifier.fit(X_train, y_train, batch_size=10, nb_epoch=100)

【讨论】:

当我尝试运行它时,它给了我以下错误: ValueError: Error when checks target: expected dense_3 to have shape (1,) but got array with shape (20,) 好的 - 你能把 X_train 和 y_train 的形状发给我吗? X_train.shape (27468, 2) y_train.shape (27468, 20) 很高兴听到。如果可行,请考虑接受并支持答案。

以上是关于ValueError:检查输入时出错:预期的dense_26_input具有形状(45781,)但得到的数组具有形状(2,)的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:检查输入时出错:预期的dense_26_input具有形状(45781,)但得到的数组具有形状(2,)

ValueError:检查输入时出错:预期 input_1 有 4 个维度,但得到的数组具有形状(无、无、无)

model.fit 给出 ValueError :检查输入时出错:预期的 conv2d 得到了形状为 () 的数组

ValueError:检查输入时出错:预期dense_11_input 具有3 维,但得到了形状为(0, 1) 的数组

ValueError:检查输入时出错:预期 lstm_1_input 具有 3 个维度,但得到的数组具有形状 (393613, 50)

ValueError:检查输入时出错:预期 permute_input 有 4 个维度,但得到了形状为 (1, 4) 的数组