Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.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 极高的分类准确度_Python_Tensorflow_Machine Learning_Keras - Fatal编程技术网

Python 极高的分类准确度

Python 极高的分类准确度,python,tensorflow,machine-learning,keras,Python,Tensorflow,Machine Learning,Keras,我试图训练一个CNN分类器,在七类图像中执行图像分类。天真地说,我希望该算法在早期训练时能产生约20%的准确率,但它在约40%的准确率范围内,这让我得出结论,不知何故,我的模型没有正确地计算分类准确率。我做错了什么 导入全局 从keras.preprocessing.image导入ImageDataGenerator 从keras.models导入顺序 从keras.layers导入Conv2D、MaxPooling2D 从keras.layers导入激活、脱落、变平、致密 从keras导入后端

我试图训练一个CNN分类器,在七类图像中执行图像分类。天真地说,我希望该算法在早期训练时能产生约20%的准确率,但它在约40%的准确率范围内,这让我得出结论,不知何故,我的模型没有正确地计算分类准确率。我做错了什么

导入全局
从keras.preprocessing.image导入ImageDataGenerator
从keras.models导入顺序
从keras.layers导入Conv2D、MaxPooling2D
从keras.layers导入激活、脱落、变平、致密
从keras导入后端为K
从keras.utils导入plot\u模型
从keras.metrics导入顶级分类精度
#定义常数
img_高度=299
img_宽度=299
批量大小=40
纪元=30
列车数据方向=“/train/”
validate_data_dir=“./validate/”
test_data_dir=“/test/”
nb_train_samples=len(glob.glob(train_data_dir+“***.jpg”))
nb_validation_samples=len(glob.glob(validate_data_dir+“***.jpg”))
nb_test_samples=len(glob.glob(test_data_dir+“***.jpg”))
#定义CNN层
如果K.image_data_format()==“channels_first”:
输入形状=(3,img\u宽度,img\u高度)
其他:
输入形状=(img\u宽度,img\u高度,3)
模型=顺序()
model.add(Conv2D(32,(3,3),input_shape=input_shape))
添加(激活('relu'))
add(MaxPooling2D(池大小=(2,2)))
model.add(Conv2D(32,(3,3)))
添加(激活('relu'))
add(MaxPooling2D(池大小=(2,2)))
model.add(Conv2D(64,(3,3)))
添加(激活('relu'))
add(MaxPooling2D(池大小=(2,2)))
model.add(展平())
模型.添加(密度(64))
添加(激活('relu'))
模型。添加(辍学率(0.5))
model.add(密集型(7,activation='softmax'))
def top_2_分类精度(y_true,y_pred):
返回top_k_分类精度(y_true,y_pred,k=2)
model.compile(loss='classifical_crossentropy',
优化器='adam',
指标=[‘分类准确度’、顶级分类准确度])
#列车数据发生器
打印(“\n初始化培训数据生成器:”)
列车\数据发生器=图像数据发生器(重缩放=1./255)
train_generator=来自目录的train_datagen.flow_(
列车数据目录,
目标尺寸=(图像宽度、图像高度),
批次大小=批次大小,
class_mode='classifical')
打印(“”)
#验证数据源
打印(“初始化验证数据生成器:”)
验证\u datagen=ImageDataGenerator(重缩放=1./255)
有效的\u生成器=验证\u datagen.flow\u来自\u目录(
验证\u数据\u目录,
目标尺寸=(图像宽度、图像高度),
批次大小=批次大小,
class_mode='classifical')
打印(“”)
#测试数据发生器
打印(“初始化测试数据生成器:”)
test_datagen=ImageDataGenerator(重缩放=1./255)
test_generator=test_datagen.flow_from_目录(
测试数据目录,
目标尺寸=(图像宽度、图像高度),
批次大小=批次大小,
class_mode='classifical')
打印(“”)
#跑
打印(“开始培训…”)
1.2型拟合发生器(
列车发电机,
每个历元的步数=nb\U序列样本//批量大小,
时代,
验证\u数据=有效的\u生成器,
验证\u步骤=nb\u验证\u样本//批次大小,
详细信息=2)
打印(“完成!\n\n”)
#节省重量
model.save('model.h5')
#评估
打印(“开始测试…”)
打印(“[损失,错误百分比]”)
模型。评估发电机(测试发电机)
以下是输出:

使用TensorFlow后端。
正在初始化训练数据生成器:
找到了5600张属于7类的图片。
正在初始化验证数据生成器:
找到了700张属于7类的图片。
正在初始化测试数据生成器:
找到了700张属于7类的图片。
开始训练。。。
纪元1/30
-58s-损失:1.8719-分类准确率:0.2279-顶级2-分类准确率:0.4107-价值损失:1.8315-价值分类准确率:0.2809-价值顶级2-分类准确率:0.4456
纪元2/30
-53s-损失:1.7584-分类准确率:0.2913-顶级2-分类准确率:0.4714-价值损失:1.6551-价值分类准确率:0.3485-价值顶级2-分类准确率:0.5559
纪元3/30
-53s-损失:1.6987-分类精度:0.3166-顶级2-分类精度:0.5150-价值损失:1.6445-价值分类精度:0.3897-价值顶级2-分类精度:0.5735
纪元4/30
-53s-损失:1.6495-分类准确率:0.3407-顶级2-分类准确率:0.5418-价值损失:1.5398-价值分类准确率:0.3868-价值顶级2-分类准确率:0.6029
纪元5/30
-53s-损失:1.5844-分类准确率:0.3687-顶级2-分类准确率:0.5729-增值损失:1.5124-增值分类准确率:0.4162-增值顶级2-分类准确率:0.5985
纪元6/30
-53s-损失:1.4989-分类准确率:0.4075-顶级2-分类准确率:0.6132-价值损失:1.5065-价值分类准确率:0.3956-价值顶级2-分类准确率:0.6029
纪元7/30
-53s-损失:1.4233-分类准确率:0.4314-顶级分类准确率:0.6416-价值损失:1.4560-价值分类准确率:0.4618-价值顶级分类准确率:0.6441
纪元8/30
-53s-损失:1.3212-分类准确率:0.4754-顶级分类准确率:0.6770-价值损失:1.4556-价值分类准确率:0.4324-价值顶级分类准确率:0.6309
纪元9/30
-53s-损失:1.2623-分类准确率:0.4993-顶级分类准确率:0.7055-价值损失:1.5422-价值分类准确率:0.4397-价值顶级分类准确率:0.6279
纪元10/30

发生这种情况的原因有两方面:

  • 使用
    steps\u per\u epoch=nb\u train\u samples//batch\u size
    意味着它只能在
    batch\u size
    epoch之后看到整个集合

  • 未设置
    shuffle
    选项


  • 结果,模特儿学会了为某个特定的班级投票。虽然可以说,这不是一个“错误”,但它关系到在一个时代结束时的准确性如此之高。

    是什么让你认为任何事情都是错误的?你期望的20%似乎只是一个随机数,我知道