python - 塑造神经网络分类输出维度?

标签 python pandas numpy neural-network keras

当我安装网络时,我收到以下错误 - ValueError: 检查目标时出错:预期的dense_6 具有形状 (2,),但得到的数组具有形状 (22,)

据我所知,考虑到数据集的分割方式,形状应该是正确的?非常感谢任何帮助,谢谢!

数据集可以在这里找到:https://archive.ics.uci.edu/ml/machine-learning-databases/mushroom/agaricus-lepiota.data

from keras.layers import Dense
from keras.models import Sequential
import keras.utils
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd

# seed weights
np.random.seed(3)

# import dataset
data = pd.read_csv('agaricus-lepiota.csv', delimiter=',')

# encode labels as integers so the can be one-hot-encoded which takes int matrix
le = preprocessing.LabelEncoder()
data = data.apply(le.fit_transform)

# one-hot-encode string data (now type int)
ohe = preprocessing.OneHotEncoder(sparse=False)
data = ohe.fit_transform(data)

X = data[:, 1:23]
Y = data[:, 0:1]

# split into test and train set
x_train, y_train, x_test, y_test = train_test_split(X, Y, test_size=.2, random_state=5)

# create model
model = Sequential()
model.add(Dense(500, input_dim=22, activation='relu'))
model.add(Dense(300, activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(25, activation='relu'))
model.add(Dense(2, activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=1000, batch_size=25)

最佳答案

我在您的代码中发现了 2 个错误。

1)

x_train, y_train, x_test, y_test = train_test_split(X, Y, test_size=.2, random_state=5)

必须是

x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=.2, random_state=5)

检查this了解有关该功能的更多信息。

2)

y_train 中只有一列。但模型中的最后一层添加了两列。所以而不是

model = Sequential()
model.add(Dense(500, input_dim=22, activation='relu'))
model.add(Dense(300, activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(25, activation='relu'))
model.add(Dense(2, activation='sigmoid'))

使用这个:

model = Sequential()
model.add(Dense(500, input_dim=22, activation='relu'))
model.add(Dense(300, activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(25, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

关于python - 塑造神经网络分类输出维度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48798979/

相关文章:

numpy - FFT 卷积如何以及为什么比直接卷积更快?

numpy - 将 Numpy 数组复制到内存 View

具有多个等效列的 Python Pandas VLookup

python - Django 基于类的 View 中 self.request 和 request 的区别

python - 如何遍历列表并检索最小值的索引但忽略输出列表中的重复项?

python - 来自数据框的散点图,在 x 轴上有索引

python - 从 Excel 中读取和比较坐标

python - 为什么 Pandas apply 比矢量化内置函数更快

numpy - 图像边界查找和填充

python - 循环的时间复杂度是多少?