ValueError: 检查目标时出错:期望dense_2的形状为(None, 2),但得到的数组形状为(321, 3)

我想使用Keras创建一个图像分类器,并用一些示例图像进行训练。之后,我将使用预训练模型并在末尾添加几层,但首先,我想了解Keras和CNNs。

我的控制台打印出以下错误:

ValueError: 检查目标时出错:期望dense_2的形状为(None, 2),但得到的数组形状为(321, 3)

这是我的代码:

from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionimport argparseimport sysimport timeimport numpy as npimport cv2import timefrom PIL import Imageimport kerasimport globfrom keras.models import Sequentialfrom keras.models import load_modelfrom keras.layers import Dense, Dropout, Flattenfrom keras.layers import Conv2D, MaxPooling2Dfrom keras.optimizers import SGDfrom sklearn.preprocessing import LabelBinarizerlabels = ['buena', 'mala', 'otro']def to_one_hot(labels, ys):    result = np.zeros((len(ys),len(labels)))    for i in range(result.shape[0]):        for j in range(result.shape[1]):            result[i,j] = int(ys[i] == labels[j])    return resultdef build_dataset(labels):    num_classes = len(labels)    x = []    y = []    for label in labels:        for filename in (glob.glob('./tf_files/papas_fotos/'+label+'/*.jpg')):            img = cv2.imread(filename)            img = np.resize(img,(100,100, 3))            x.append(img)            y.append(label)    y = to_one_hot(labels, y)    # y = keras.utils.to_categorical(y, num_classes=3)    x = np.array(x)    x_train = x[20:]    y_train = y[20:]    x_test = x[:19]    y_test = y[:19]    print (x.shape, y.shape)    return x_train, y_train, x_test, y_testmodel = Sequential()# input: 100x100 images with 3 channels -> (100, 100, 3) tensors.# this applies 32 convolution filters of size 3x3 each.model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(100, 100, 3)))model.add(Conv2D(32, (3, 3), activation='relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Dropout(0.25))model.add(Conv2D(64, (3, 3), activation='relu'))model.add(Conv2D(64, (3, 3), activation='relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(256, activation='relu'))model.add(Dropout(0.5))model.add(Dense(3, activation='softmax'))sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)model.compile(loss='categorical_crossentropy', optimizer=sgd)x_train, y_train, x_test, y_test = build_dataset(labels)model = load_model('thebestmodel.h5')print (model)model.fit(x_train, y_train, batch_size=32, epochs=20)score = model.evaluate(x_test, y_test, batch_size=32)model.save('thebestmodel.h5')print (score)

我犯了什么错误?我认为可能是我的独热编码标签的大小问题,但我无法解决这个问题。

谢谢!


回答:

虽然你的代码已经修复了这个特定的错误,但你正在加载一个保存的模型:model = load_model('thebestmodel.h5')

这会撤销之前的所有操作。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注