微调接收v3

2024-10-02 10:31:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想微调Inception V3以识别UC Merced土地使用数据集。 它包含21个类,每个类有100个图像。 我手动将数据集拆分为5个部分,每个部分和每个类我有60个图像用于培训,20个用于验证,20个用于测试。 例子: 在每个类的第一次折叠中,0到59之间的图像用于训练,60到79之间的图像用于验证ecc。。。 在第二次折叠中,0到19之间的图像用于测试,80到99之间的图像用于验证ecc。。。 我应用了交叉验证,所以最后我将使用数据集中的所有图像测试网络

通过这次微调,我达到了93%,97%是目标

# import
from keras.preprocessing import image
import os
from matplotlib import pyplot as plt
import numpy as np
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential, Model
from keras.layers import Conv2D, MaxPooling2D, Activation, Dropout, Flatten, Dense, GlobalAveragePooling2D
from keras import backend as K
from keras import applications
from keras import utils
from keras import optimizers
from sklearn.model_selection import KFold
import random
from keras.preprocessing import image
import os
from matplotlib import pyplot as plt


directory_train=["./UCMerced_LandUse2/Images/Fold1/Training","./UCMerced_LandUse2/Images/Fold2/Training","./UCMerced_LandUse2/Images/Fold3/Training","./UCMerced_LandUse2/Images/Fold4/Training","./UCMerced_LandUse2/Images/Fold5/Training"]
directory_validation=["./UCMerced_LandUse2/Images/Fold1/Validation","./UCMerced_LandUse2/Images/Fold2/Validation","./UCMerced_LandUse2/Images/Fold3/Validation","./UCMerced_LandUse2/Images/Fold4/Validation","./UCMerced_LandUse2/Images/Fold5/Validation"]
directory_test=["./UCMerced_LandUse2/Images/Fold1/Test","./UCMerced_LandUse2/Images/Fold2/Test","./UCMerced_LandUse2/Images/Fold3/Test","./UCMerced_LandUse2/Images/Fold4/Test","./UCMerced_LandUse2/Images/Fold5/Test"]

img_width, img_height = 256, 256

num_samples=2100
batch_size = 10

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

Gen = ImageDataGenerator(rescale=1./255)

train_generator=[]
valid_generator=[]
test_generator=[]

print("Creazione Train Generator")

for i in range(5):
  train_generator.append(Datagen.flow_from_directory(
  directory_train[i],
  target_size=(img_width, img_height),  
  batch_size=batch_size, 
  class_mode='categorical'
   ))

print(train_generator[0].n//batch_size)
print("Creazione Validation Generator")

for i in range(5):
  valid_generator.append(Gen.flow_from_directory(
  directory_validation[i],
  target_size=(img_width, img_height),  
  batch_size=batch_size, 
  class_mode='categorical'
   ))

print(valid_generator[i].n//batch_size)

print("Creazione Test Generator")

for i in range(5):
  test_generator.append(Gen.flow_from_directory(
  directory_test[i],
  target_size=(img_width, img_height),  
  batch_size=batch_size, 
  class_mode='categorical'
   ))

# Inception V3 with pre-trained weights
base_model = applications.InceptionV3(weights='imagenet', include_top=False,input_shape=(256,256,3),classes=21)
base_model.trainable=True;


num_epochs = 100
history=[]
risultati=[]


for i in range(5):

  model=Sequential()  
  model.add(base_model)
  model.add(GlobalAveragePooling2D())
  model.add(Dense(1024,activation='relu'))
  model.add(Dropout(0.5))
  model.add(Dense(1024,activation='relu'))
  model.add(Dropout(0.5))
  model.add(Dense(100,activation='relu'))
  model.add(Dropout(0.5))
  model.add(Dense(21,activation='softmax'))
  model.summary()

  model.compile(loss='categorical_crossentropy',
              optimizer=optimizers.SGD(1e-4,momentum=0.9),
              metrics=['accuracy'])

  print(i)
  model.fit_generator(train_generator[i],steps_per_epoch=train_generator[i].n//batch_size,epochs=num_epochs,validation_data=valid_generator[i],validation_steps=valid_generator[i].n//batch_size,shuffle=True)
  model.save('sasaprova.h5')
  print(i)
  scores=model.evaluate_generator(test_generator[i])
  print(scores[1])
  risultati.append(scores[1]*100)


print(np.mean(risultati))

有什么建议吗


Tags: from图像importaddimgsizemodelbatch
1条回答
网友
1楼 · 发布于 2024-10-02 10:31:12

可以提高分类精度的方法很少:

  1. 将EfficientNet与嘈杂的学生体重一起使用。要训练的参数数量较少。由于其具有可扩展的体系结构,因此具有更好的准确性

  2. 您可以使用测试时间扩展。在测试数据生成器中,执行简单的水平翻转、垂直翻转(如果数据看起来真实)和仿射变换。它将生成数据的多个视图,并帮助模型平均出更可能的类

  3. 您的数据扩充可能更加详尽。检查仪表库。此外,还有随机橡皮擦、剪切和混合策略已被证明是有用的

  4. 尝试标签平滑。它还可以帮助您的分类器为正确的类提供更多的概率

  5. 尝试学习速度热身

相关问题 更多 >

    热门问题