Python 深度学习模型不能准确预测Keras?

Python 深度学习模型不能准确预测Keras?,python,tensorflow,keras,deep-learning,kaggle,Python,Tensorflow,Keras,Deep Learning,Kaggle,我对深度学习和Keras很陌生。我创建了一个在ASL(美国手语)数据集上进行训练的模型,该数据集包含近80000张训练图像和1500张测试图像。我还添加了一些其他类,即0-9之间的手语数字。所以,我总共有39门课(0-9和A-Z)。我的任务是训练这个数据集并将其用于预测。我的预测输入将是一个来自网络摄像头的帧,我将在其中显示手势 我的Keras模型 ASL数据集图像的大小为200x200,数字符号数据集的大小为64x64。在以96%的验证准确率运行了5个EPOC之后,当我在视频上运行它时,我仍然

我对深度学习和Keras很陌生。我创建了一个在ASL(美国手语)数据集上进行训练的模型,该数据集包含近80000张训练图像和1500张测试图像。我还添加了一些其他类,即0-9之间的手语数字。所以,我总共有39门课(0-9和A-Z)。我的任务是训练这个数据集并将其用于预测。我的预测输入将是一个来自网络摄像头的帧,我将在其中显示手势

我的Keras模型 ASL数据集图像的大小为200x200,数字符号数据集的大小为64x64。在以96%的验证准确率运行了5个EPOC之后,当我在视频上运行它时,我仍然无法获得良好的预测

用于视频帧的python程序 我不明白为什么即使在对如此大的数据集进行训练后,我也不能得到准确的预测。 我需要做什么样的改变才能准确预测我的39门课

数据集的链接。

在分类器中。编译时使用loss='binary\u crossentropy',仅在标签为二进制(仅两个类)时使用。当您有多类分类时,您必须根据标签的数量和类型使用适当的损失函数(即“稀疏\分类\交叉熵”)


尝试阅读有用的博客文章,详细解释每一个损失函数

在classifier.compile中,您使用loss='binary\u crossentropy',仅在标签为二进制的情况下使用(仅两个类)。当您有多类分类时,您必须根据标签的数量和类型使用适当的损失函数(即“稀疏\分类\交叉熵”)


尝试阅读有用的博客文章,详细解释每一个损失函数

这与标题无关:“使用python压缩文件时压缩不必要的文件夹”您需要使标题反映一般问题:抱歉,标题错误这与标题无关:“使用python压缩文件时压缩不必要的文件夹”你需要让你的标题反映出一个普遍的问题:对不起,标题错了。你能提高预测的准确性吗?你得试试。训练的准确性有偏差;阅读答案,解释为什么你在训练中获得了较高的精度,尽管损失是错误的。使用“稀疏分类交叉熵”时,我得到了以下错误
value错误:检查目标时出错:预期密集6具有形状(1),但得到了具有形状(39)的数组。
抱歉,请尝试“分类交叉熵”。我已经复制了你的实验,在10个时代之后,列车生成器拆分后的验证精度约为55/56%。这个结果比前一个结果更真实。这会提高预测的准确性吗?你得试试。训练的准确性有偏差;阅读答案,解释为什么你在训练中获得了较高的精度,尽管损失是错误的。使用“稀疏分类交叉熵”时,我得到了以下错误
value错误:检查目标时出错:预期密集6具有形状(1),但得到了具有形状(39)的数组。
抱歉,请尝试“分类交叉熵”。我已经复制了你的实验,在10个时代之后,列车生成器拆分后的验证精度约为55/56%。这个结果比前一个结果更真实。
classifier = Sequential()

classifier.add(Conv2D(32, (3, 3), input_shape = (100, 100, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Flatten())

classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 39, activation = 'softmax'))

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



from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale = 1./255,
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True)

test_datagen = ImageDataGenerator(rescale = 1./255)

training_set = train_datagen.flow_from_directory('train',
                                                 target_size = (100,100),
                                                 batch_size = 128,
                                                 class_mode = 'categorical')

test_set = test_datagen.flow_from_directory('test',
                                            target_size = (100, 100),
                                            batch_size = 128,
                                            class_mode = 'categorical')

classifier.fit_generator(training_set,
                         steps_per_epoch = 88534,
                         epochs = 10,
                         validation_data = test_set,
                         validation_steps = 1418)
classifier = load_model('asl_original.h5')
classifier.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy'])

cam = cv2.VideoCapture(0)

while(1):
    try:
        ret, frame = cam.read()
        frame = cv2.flip(frame,1)
        roi = frame[100:400,200:500]
        cv2.rectangle(frame,(200,100),(500,400),(0,255,0),2) 
        cv2.imshow('frame',frame) 
        cv2.imshow('roi',roi)
        img = cv2.resize(roi,(100,100))
        img = np.reshape(img,[1,100,100,3]) 
        classes = classifier.predict_classes(img)
        print(classes)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break


    except Exception:
        traceback.print_exc()
        pass