Плохие результаты тренировок, когда я пытаюсь обнаружить неисправные и неисправные солнечные элементы - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь классифицировать неисправные солнечные элементы. У меня есть огромный набор данных как с дефектными пластинами, так и с не поврежденными солнечными элементами. Согласно нескольким предложениям из исследовательских работ, я использовал модель VGG 16 для целей обучения. Но даже после 3 эпох он показывает 100% точность. Я не понимаю, почему так происходит. Есть ли другой способ решения этой проблемы, любой другой алгоритм. Я загружаю некоторые дефектные ячейки, которые есть в моем наборе данных

This is the kind of defect image I have[[![] 2 ] 2 ] 3

from keras.layers import Input, Lambda, Dense, Flatten
from keras.models import Model
from keras.applications.vgg16 import VGG16
from keras.applications.vgg16 import preprocess_input
from keras.preprocessing import image
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
import numpy as np
from glob import glob
import matplotlib.pyplot as plt

# re-size all the images to this
IMAGE_SIZE = [224, 224]

train_path = 'Datasets/Train'
valid_path = 'Datasets/Test'

# add preprocessing layer to the front of VGG
vgg = VGG16(input_shape=IMAGE_SIZE + [3], weights='imagenet', include_top=False)

# don't train existing weights
for layer in vgg.layers:
  layer.trainable = False



  # useful for getting number of classes
folders = glob('Datasets/Train/*')


# our layers - you can add more if you want
x = Flatten()(vgg.output)
# x = Dense(1000, activation='relu')(x)
prediction = Dense(len(folders), activation='softmax')(x)

# create a model object
model = Model(inputs=vgg.input, outputs=prediction)

# view the structure of the model
model.summary()

# tell the model what cost and optimization method to use
model.compile(
  loss='categorical_crossentropy',
  optimizer='adam',
  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('Datasets/Train',
                                                 target_size = (224, 224),
                                                 batch_size = 32,
                                                 class_mode = 'categorical')

test_set = test_datagen.flow_from_directory('Datasets/Test',
                                            target_size = (224, 224),
                                            batch_size = 32,
                                            class_mode = 'categorical')

# fit the model
r = model.fit_generator(
  training_set,
  validation_data=test_set,
  epochs=10,
  steps_per_epoch=len(training_set),
  validation_steps=len(test_set)
)
# loss
plt.plot(r.history['loss'], label='train loss')
plt.plot(r.history['val_loss'], label='val loss')
plt.legend()
plt.show()
plt.savefig('LossVal_loss')

# accuracies
plt.plot(r.history['acc'], label='train acc')
plt.plot(r.history['val_acc'], label='val acc')
plt.legend()
plt.show()
plt.savefig('AccVal_acc')

import tensorflow as tf

from keras.models import load_model

model.save('defect_features_new_model.h5')

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Ваши данные для сети выглядят очень просто, поэтому не удивительно, что вы достигнете высокой точности. Помните, что сеть обучается партиями, поэтому для каждых 32 изображений она проходит цикл обратного распространения и соответственно обновляет весовые коэффициенты. Так что, если у вас есть много изображений, которые, как вы говорите, вы делаете, вы выполняете много итераций по весам. Я не вижу здесь проблемы. Вы не прошли обучение в том смысле, что ваша точность проверки составляет 100%. Конечно, вы могли бы получить хорошие результаты с более простой моделью, но зачем беспокоиться о ваших результатах?

0 голосов
/ 26 февраля 2020

Такое ощущение, что изображения слишком простые и не содержат сложных данных. Следовательно, они имеют тенденцию соответствовать модели VGG16. Модели VGG16 обычно обучаются на гораздо более сложных данных. Вы можете попробовать определить свою собственную сверточную нейронную сеть. Поскольку вы уже используете keras, вы можете создать последовательную модель, чтобы определить свою собственную модель с минимумом 2 или 3 сверточных слоя Пожалуйста, обратитесь к ссылке для последовательной модели keras

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...