Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在两类100个样本上训练CNN模型,然后在200个新样本上进行测试?_Python_Tensorflow_Keras_Conv Neural Network - Fatal编程技术网

Python 如何在两类100个样本上训练CNN模型,然后在200个新样本上进行测试?

Python 如何在两类100个样本上训练CNN模型,然后在200个新样本上进行测试?,python,tensorflow,keras,conv-neural-network,Python,Tensorflow,Keras,Conv Neural Network,我的训练集有两门课:鸟类(100个样本)和无鸟(100个样本)。并且,测试集是未标记的,由200个测试样本组成(与鸟类和非鸟类混合)。对于测试集中的每个样本,我打算使用CNN和Keras将其分类为鸟或无鸟 import numpy as np import keras from keras import backend as K from keras.models import Sequential from keras.layers import Activation from keras.l

我的训练集有两门课:鸟类(100个样本)和无鸟(100个样本)。并且,测试集是未标记的,由200个测试样本组成(与鸟类和非鸟类混合)。对于测试集中的每个样本,我打算使用CNN和Keras将其分类为鸟或无鸟

import numpy as np
import keras
from keras import backend as K
from keras.models import Sequential
from keras.layers import Activation
from keras.layers.core import Dense, Flatten
from keras.optimizers import Adam
from keras.metrics import categorical_crossentropy
from keras.preprocessing.image import ImageDataGenerator
from keras.layers.normalization import BatchNormalization
from keras.layers.convolutional import *
from sklearn.metrics import confusion_matrix
import itertools
import matplotlib.pyplot as plt

train_path = 'dataset/train_set'
test_path = 'dataset/test_set'

train_batches = ImageDataGenerator().flow_from_directory(train_path, target_size=(224,224), classes=['bird', 'no_bird'], batch_size=10) # bird directory consisting of 100 
test_batches = ImageDataGenerator().flow_from_directory(test_path, target_size=(224,224), classes=['unknown'], batch_size=10)

model = Sequential([
    Conv2D(32, (3, 3), activation='relu', input_shape=(224,224,3)),
    Flatten(),
    Dense(2, activation='softmax'),
])

model.compile(Adam(lr=.0001), loss='categorical_crossentropy', metrics=['accuracy'])

model.fit_generator(train_batches, steps_per_epoch=20, validation_data=test_batches, validation_steps=20, epochs=10, verbose=2)
我在最后一步遇到的错误是:

ValueError: Error when checking target: expected dense_1 to have shape (2,) but got array with shape (1,)

现在,我知道这可能是因为test_集只有一个目录,因为它是未标记的。如果我错了,请纠正我。我应该怎么做才能使这项工作正常?

test\u batches=ImageDataGenerator().flow\u from\u目录(test\u path,target\u size=(224224),classes=['unknown',batch\u size=10)
是错误的

您应该执行
test\u batches=ImageDataGenerator()。从\u目录(test\u path,target\u size=(224224),classes=['bird','no\u bird',batch\u size=10)继续进行流\u
。这样你就可以为你的预测打分了

以下资料:

当你看的时候,它说

验证数据:元组(x_val,y_val)或元组(x_val,y_val,val_sample_weights),用于在每个历元结束时评估损失和任何模型度量。模型将不会根据这些数据进行训练。这将覆盖验证和分割


测试数据必须与列车数据的形状相同。您必须组织测试数据目录,使其结构与培训数据相同

您的测试集似乎未标记。从
model.fit
中删除验证参数。应该是:

model.fit_generator(train_batches, steps_per_epoch=20, epochs=10, verbose=2)

没有标签您无法验证。

您只有一个类进行测试是什么意思?如果你有鸟/没有鸟,那么你有两门课是的,对不起。有两个班。一个目录。所以测试是未标记的?您只想训练测试,然后将测试分为两类,而不计算任何测试精度/指标?是的,测试集未标记。不可能处理未标记的数据吗?我是新来的。现在我只想通过培训和测试来了解它是如何工作的。当我这样做时,我会在控制台中看到“找到了属于2个类的0个图像”。test_path='dataset/test_set':此路径仅由1个目录组成,其中包含200张添加了后续内容的'bird'和'no_bird'图片。是的,我的测试集未标记。我将编辑这个问题。谢谢,我会试试你说的。你说得对。似乎@Apoorve Patne正在尝试做预测,而不仅仅是给他的模型打分/排名