Tensorflow ValueError:检查目标时出错:预期密集_2具有形状(无,2),但获得具有形状(321,3)的数组

Tensorflow ValueError:检查目标时出错:预期密集_2具有形状(无,2),但获得具有形状(321,3)的数组,tensorflow,machine-learning,deep-learning,keras,convolutional-neural-network,Tensorflow,Machine Learning,Deep Learning,Keras,Convolutional Neural Network,我想使用keras创建一个图像分类器,并用几个示例图像对其进行训练。然后,我将使用预先训练好的模型,并在最后添加一些层,但首先,我想了解keras和cnn 我的控制台打印以下错误: ValueError:检查目标时出错:预期密集_2具有形状 (无,2)但获得了形状为(321,3)的数组 这是我的密码: from __future__ import absolute_import from __future__ import division from __future__ import prin

我想使用keras创建一个图像分类器,并用几个示例图像对其进行训练。然后,我将使用预先训练好的模型,并在最后添加一些层,但首先,我想了解keras和cnn

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

ValueError:检查目标时出错:预期密集_2具有形状 (无,2)但获得了形状为(321,3)的数组

这是我的密码:

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import argparse
import sys
import time

import numpy as np
import cv2
import time
from PIL import Image

import keras
import glob
from keras.models import Sequential
from keras.models import load_model
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.optimizers import SGD
from sklearn.preprocessing import LabelBinarizer


labels = ['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 result

def 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_test

model = 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\u model('thebestmodel.h5')


这是撤消这行之前的所有操作

您在此处发布的代码已经修复了上述错误<代码>密集(3,…)将预测3个类。这是我的想法,但错误不断出现。