Python ValueError:形状(1,2)和(1,4)不兼容

Python ValueError:形状(1,2)和(1,4)不兼容,python,keras,Python,Keras,我试图解决一个简单的多类分类问题。但不知何故,我得到了这个错误。当我使用一个单层和两个神经元时,程序可以工作,但结果不好,但这没有意义,因为这是一个多类问题,所以输出层的输出应该有4个神经元。然后它就不起作用了。我认为我在这里犯了一个非常愚蠢的错误。下面是我的代码 import keras from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout, Activ

我试图解决一个简单的多类分类问题。但不知何故,我得到了这个错误。当我使用一个单层和两个神经元时,程序可以工作,但结果不好,但这没有意义,因为这是一个多类问题,所以输出层的输出应该有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_category(y)**将我的标签转换为一种热编码,这种编码有效地解决了形状错误

y_train = keras.utils.to_categorical(y) 
在此之后,形状变为:

(8, 4)
因此,每当出现多类问题时,将标签编码为一个热编码类型时,标签的形状应该是

(size_of_data, num_classes).

现在,我学会了在处理多类问题时如何正确地对数据进行编码,以及如果出现这种错误,应该在哪里解决问题。

我解决了这个错误。原因是我的标签,即y_train的形状不合适,导致了问题。这里,课程数量为4,我的培训数据以这种格式标记[0,0,1,1,2,2,3,3]。在我上面的问题陈述中,我用分类格式表示标签的方式是完全错误的。因此,为了正确地编码数据,我使用**keras.utils.to_category(y)**将我的标签转换为一种热编码,这种编码有效地解决了形状错误

y_train = keras.utils.to_categorical(y) 
在此之后,形状变为:

(8, 4)
因此,每当出现多类问题时,将标签编码为一个热编码类型时,标签的形状应该是

(size_of_data, num_classes).
我现在学习了在处理多类问题时如何正确地编码数据,以及如果出现这种错误,应该在哪里解决问题