python - ValueError:形状 (1, 2) 和 (1, 4) 不兼容
问题描述
我正在尝试解决一个简单的多类分类问题。但不知何故,我收到了这个错误。当我使用单层和 2 个神经元时,该程序可以工作,但结果并不好,但这没有意义,因为它是一个多类问题,所以输出层的输出应该有 4 个神经元。之后它不起作用。我认为我在这里犯了一个非常愚蠢的错误。下面是我的代码。
import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation
from tensorflow.keras.optimizers import Adam
# Generate dummy data
import numpy as np
x_train = np.array([[1, 1],
[1, 2],
[2, 2],
[-1,0],
[-1,-2],
[2, 1],
[-1,-2],
[-1,-2]])
print(x_train.shape)
y_train = np.array([[0,0],
[0,0],
[0,1],
[0,1],
[1,0],
[1,0],
[1,1],
[1,1]])
# from keras.utils.np_utils import to_categorical
# y_train = to_categorical(y_train)
print(y_train.shape)
model = Sequential()
model.add(Dense(8, activation='relu', input_dim=2))
# model.add(Dropout(0.5))
# model.add(Dense(4, activation='relu'))
model.add(Dense(4, activation='softmax'))
# model.add(Dropout(0.5))
adm = Adam(lr=0.001)
# sgd = SGD(lr=0.001)
model.compile(loss='categorical_crossentropy',
optimizer=adm,
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=20, batch_size=1)
score = model.evaluate(x_train, y_train, batch_size=1)
错误:
ValueError: Shapes (1, 2) and (1, 4) are incompatible
解决方案
我解决了这个错误。原因是我的标签,即 y_train 的形状不合适导致问题。在这里,类的数量是 4,我的训练数据以这种格式标记为 [0,0,1,1,2,2,3,3]。在我上面的问题陈述中,我以分类格式表示我的标签的方式是完全错误的。因此,为了正确编码我使用 ** keras.utils.to_categorical(y)** 将我的标签转换为有效并解决了形状错误的一次性编码的数据。
y_train = keras.utils.to_categorical(y)
在此之后,形状变为:
(8, 4)
因此,每当存在多类问题时,将其编码为 one-hot 编码类型时的标签形状应该是
(size_of_data, num_classes).
我现在学会了在处理多类问题时如何正确编码数据,以及如果出现此类错误,该去哪里解决问题。
推荐阅读
- javascript - 值未传递给父组件
- audio - 低延迟的FFmpeg实时音频流
- python - 子进程 for 循环失败并出现语法错误
- javascript - Angular Webpack 设置:使用 webpack 从 css 迁移到 sass
- java - android中的CursorIndexOutOfBoundException index 0 size 0
- excel - 粘贴 Excel 图表
- java - 如何比较时间戳是否在Java中的给定时间段范围内
- cmd - 通过cmd和时间戳备份删除window中的子文件夹和文件
- python - 实现双链表 - 调用头节点时的最大递归深度
- android - 如何摆脱 AppBarLayout 和 TabLayout 之间的阴影?