Что делать, если моя модель CNN не изменяет свою точность и потери и выдает одинаковый прогноз на любых входных изображениях - PullRequest
0 голосов
/ 22 мая 2019

В настоящее время я работаю над созданием классификатора изображений с использованием стеганографии.Но созданная мной модель (основанная на этой модели) не меняет своей точности и потерь.

Я создал свой собственный набор данных.Мой набор данных тестирования содержит ~ 4000 изображений каждого стеганографического алгоритма, которые F5, outguess, jsteg плюс 4000 изображений без каких-либо стеганографических материалов внутри, имеющих в общей сложности 10000 изображений.Изображения со стеганографией содержат только текст внутри «это секретное сообщение» .Все изображения имеют размер 512x512 и размер.

Вот как я создал свою модель

    def createModel(self):

        self.model = Sequential()

        self.model.add(Conv2D(3,(3,3), input_shape=(self.IMAGE_SIZE,self.IMAGE_SIZE,3)))
        self.model.add(Activation('relu'))

        self.model.add(Conv2D(64,(509,509)))
        self.model.add(Activation('relu'))

        self.model.add(Flatten())
        # self.model.add(Dropout(0.4))
        # self.model.add(Dense(512, activation='relu'))
        self.model.add(Dense(3, activation='softmax'))

, и вот как я тренируюсь

    def trainModel(self):

        X_train,y_train = self.getTrainingData()
        X_test,y_test = self.getTestingData()


        run_opts = tf.RunOptions(report_tensor_allocations_upon_oom = True)
        self.model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer='sgd',
              metrics=['accuracy'], options = run_opts)

        self.model.fit(
            X_train, 
            y_train, 
            batch_size=1, 
            validation_data=(X_test, y_test), 
            epochs=5)
        self.model.summary()
        score = self.model.evaluate(X_test, y_test, verbose=0)
        print('Test loss:', score[0])
        print('Test accuracy:', score[1])

Что я уже пробовал:

  1. Увеличьте эпох и batch_size
  2. измените оптимизатор с Адам до sgd
  3. изменить скорость обучения
  4. увеличить количество ядер
  5. изменить активацию (с relu *От 1039 * до tanh до relu )
  6. добавьте плотный слой от 64 до 254 до 512, затем закомментируйте его

Яиспользуя python 3.5.2 , тензор потока 1.15.0 , ubuntu 16.04 , керат 2.2.4

пожалуйста, помогитемне.Мне нужно это для моего проекта.

вот мой репозиторий , который содержит набор данных плюс весь код

Нажмите , чтобы увидеть изображение модели.summary А вот один из итоговых выводов

----------------------------------------------------------------------
______________________________________________________________________
Layer (type)                 Output Shape                   Param #
======================================================================
conv2d_1 (Conv2D)            (None, 510, 510, 3)            84
______________________________________________________________________
activation_1 (Activation)    (None, 510, 510, 3)            0
______________________________________________________________________
conv2d_2 (Conv2D)            (None, 2, 2, 64)               49743616
______________________________________________________________________
activation_1 (Activation)    (None, 2, 2, 64)               0
______________________________________________________________________
flatten_1 (Flatten)          (None, 256)                    0
______________________________________________________________________
dropout_1 (Dropout)          (None, 256)                    0
______________________________________________________________________
dense_1 (Dense)              (None, 512)                    131584
______________________________________________________________________
dense_2 (Dense)              (None, 3)                      1539
======================================================================
Total params: 49,876,823
Trainable params: 49,876,823
Non-trainable params: 0
______________________________________________________________________ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...