【问题标题】:ValueError: Error when checking input: expected dense_1_input to have shape (13,) but got array with shape (3,)?ValueError:检查输入时出错:预期dense_1_input具有形状(13,)但得到形状为(3,)的数组?
【发布时间】:2019-05-21 18:24:14
【问题描述】:

我只是通过观看 YouTube 上的视频为葡萄酒数据创建神经网络,但我在 model.fit 中遇到错误

我是机器学习的新手,所以我不知道任何类型的解决方案,所以我没有尝试过任何东西。

from sklearn.model_selection import train_test_split
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout
import pandas as pd
import numpy as np
from google.colab import files

np.random.seed(3)

# Number of Wine Classes
classifications = 3

#load dataset
uploaded = files.upload() 


for fn in uploaded.keys():
  print('User uploaded file "{name}" with length {length} bytes'.format(
      name=fn, length=len(uploaded[fn])))

import io

dataset = pd.read_csv(io.StringIO(uploaded['wine.csv'].decode('utf-8')))

X = dataset[['Wine','Alcohol','Malic.acid','Ash','Acl','Mg','Phenols','Flavanoids','Nonflavanoid.phenols','Proanth','Color.int','Hue','OD','Proline']]

y = dataset[['Wine']]

# convert output values to one-hot
x_train = keras.utils.to_categorical(y_train-1, classifications)
x_test = keras.utils.to_categorical(y_test-1, classifications)

# creating model
model = Sequential()
model.add(Dense(10, input_dim=13, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(6, activation='relu'))
model.add(Dense(6, activation='relu'))
model.add(Dense(4, activation='relu'))
model.add(Dense(2, activation='relu'))
model.add(Dense(classifications, activation='softmax'))

# compile 
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=['accuracy'])

# fit model
model.fit(x_train, y_train, batch_size=15, epochs=2500, validation_data=(x_test, y_test))

错误

ValueError:检查输入时出错:预期dense_1_input 的形状为(13,),但得到的数组的形状为(3,)

【问题讨论】:

  • 你从哪里加载x_trainy_train
  • 模型的输入声明应该有 13 个维度,但看起来好像 x_train 只有 3 个??
  • 你可以通过这个链接查看我的代码:colab.research.google.com/drive/…

标签: tensorflow keras neural-network


【解决方案1】:

在这里,你是 one_hot 编码输入值,而不是输出

# convert output values to one-hot
x_train = keras.utils.to_categorical(y_train-1, classifications)
x_test = keras.utils.to_categorical(y_test-1, classifications)

应该是:

# convert output values to one-hot
y_train = keras.utils.to_categorical(y_train-1, classifications)
y_test = keras.utils.to_categorical(y_test-1, classifications)

那么你只需要在 X 中保存特征而不是目标,所以你的新 X 是:

X = dataset[['Alcohol','Malic.acid','Ash','Acl','Mg','Phenols','Flavanoids','Nonflavanoid.phenols','Proanth','Color.int','Hue','OD','Proline']]

最后不要忘记在 fit 方法中更改变量:

model.fit(X_train, y_train, batch_size=25, epochs=5000, validation_data=(X_test, y_test))

【讨论】:

  • ValueError: 检查输入时出错:预期dense_15_input 的形状为(13,) 但得到的数组的形状为(3,)
  • 感谢您的帮助,但仍然面临这个问题,我按照您的建议更改了代码。
  • 你的 X、y、X_train 和 y_train 的形状是什么?
  • 葡萄酒数据集查看这里的代码colab.research.google.com/drive/…
  • 再次检查,因为它对我有用,我编辑了我的答案,因为还有其他问题
猜你喜欢
  • 2020-04-05
  • 2018-10-24
  • 2020-04-11
  • 2020-11-22
  • 1970-01-01
  • 2018-09-30
  • 2019-11-21
  • 2020-05-30
  • 1970-01-01
相关资源
最近更新 更多