Проблемы с обучением Тензор потока Нейронной сети, как я могу решить эту проблему? - PullRequest
0 голосов
/ 07 апреля 2020

В настоящее время я тренирую модель классификации изображений с тремя категориями транспортных средств (фургоны / внедорожники, автомобили и грузовики). У меня 1800 тренировочных образов и 210 проверочных изображений. Когда я пытаюсь подключить данные. Я предварительно обрабатываю данные с keras.preprocessing.image.ImageDataGenerator() и Val_Data.flow(. Похоже, это происходит из-за моей точности, оставаясь неизменной. Ниже приведены мой код и мои результаты. Я пытался исправить это так долго и не могу решить эту проблему.

Код:

    # Creating Training Data Shuffled and Organized
Train_Data = keras.preprocessing.image.ImageDataGenerator()

Train_Gen = Train_Data.flow(
        Train_Img, 
        Train_Labels,
        batch_size=BATCH_SIZE,
        shuffle=True)

# Creating Validation Data Shuffled and Organized
Val_Data = keras.preprocessing.image.ImageDataGenerator()

Val_Gen = Val_Data.flow(
        Train_Img, 
        Train_Labels,
        batch_size=BATCH_SIZE,
        shuffle=True)


print(Train_Gen)


###################################################################################
###################################################################################


#Outline the Model
hidden_layer_size = 300
output_size = 3

#Model Core
model = tf.keras.Sequential([

                             tf.keras.layers.Flatten(input_shape=(IMG_HEIGHT,IMG_WIDTH,CHANNELS)),
                             tf.keras.layers.Dense(hidden_layer_size, activation = 'relu'),
                             tf.keras.layers.Dense(hidden_layer_size, activation = 'relu'),
                             tf.keras.layers.Dense(hidden_layer_size, activation = 'relu'),
                             tf.keras.layers.Dense(hidden_layer_size, activation = 'relu'),
                             tf.keras.layers.Dense(hidden_layer_size, activation = 'relu'),
                             tf.keras.layers.Dense(output_size, activation = 'softmax')

                            ])

custom_optimizer = tf.keras.optimizers.SGD(learning_rate=0.001)

#Compile Model
model.compile(optimizer='adam', loss ='sparse_categorical_crossentropy', metrics = ['accuracy'])

#Train Model
NUM_EPOCHS = 15;
model.fit(Train_Gen, validation_steps = 10, epochs = NUM_EPOCHS, validation_data = Val_Gen, verbose = 2)

Результаты:

    180/180 - 27s - loss: 10.7153 - accuracy: 0.3333 - val_loss: 10.7991 - val_accuracy: 0.3300
Epoch 2/15
180/180 - 23s - loss: 10.7454 - accuracy: 0.3333 - val_loss: 10.7991 - val_accuracy: 0.3300
Epoch 3/15
180/180 - 23s - loss: 10.7454 - accuracy: 0.3333 - val_loss: 10.7991 - val_accuracy: 0.3300
Epoch 4/15
180/180 - 22s - loss: 10.7454 - accuracy: 0.3333 - val_loss: 10.7991 - val_accuracy: 0.3300
Epoch 5/15
180/180 - 22s - loss: 10.7454 - accuracy: 0.3333 - val_loss: 10.7991 - val_accuracy: 0.3300
Epoch 6/15
180/180 - 21s - loss: 10.7454 - accuracy: 0.3333 - val_loss: 10.7991 - val_accuracy: 0.3300
Epoch 7/15
180/180 - 22s - loss: 10.7454 - accuracy: 0.3333 - val_loss: 10.7991 - val_accuracy: 0.3300
Epoch 8/15
180/180 - 22s - loss: 10.7454 - accuracy: 0.3333 - val_loss: 10.7991 - val_accuracy: 0.3300
Epoch 9/15
180/180 - 23s - loss: 10.7454 - accuracy: 0.3333 - val_loss: 10.7991 - val_accuracy: 0.3300
Epoch 10/15
180/180 - 22s - loss: 10.7454 - accuracy: 0.3333 - val_loss: 10.7991 - val_accuracy: 0.3300
Epoch 11/15
180/180 - 22s - loss: 10.7454 - accuracy: 0.3333 - val_loss: 10.7991 - val_accuracy: 0.3300
Epoch 12/15
180/180 - 22s - loss: 10.7454 - accuracy: 0.3333 - val_loss: 10.7991 - val_accuracy: 0.3300
Epoch 13/15
180/180 - 22s - loss: 10.7454 - accuracy: 0.3333 - val_loss: 10.7991 - val_accuracy: 0.3300
Epoch 14/15
180/180 - 22s - loss: 10.7454 - accuracy: 0.3333 - val_loss: 10.7991 - val_accuracy: 0.3300
Epoch 15/15
180/180 - 22s - loss: 10.7454 - accuracy: 0.3333 - val_loss: 10.7991 - val_accuracy: 0.3300

1 Ответ

0 голосов
/ 07 апреля 2020

Полагаю, первое, на что вам нужно обратить внимание - это сверточные нейронные сети, так как я вижу, что вы пытаетесь использовать плотную сеть для решения проблемы на основе изображений. Это будет работать, но не так хорошо, как CNN.

Есть много причин, по которым модели застряли в тензорном потоке, наиболее распространенные, в которые я попал:

  1. было время, когда у меня застряла модель, потому что мои входные данные не были numpy массивами
  2. скорость обучения оптимизатора слишком высока ..

Начните с создания пользовательской скорости обучения оптимизатора, которая ниже, чем по умолчанию, это означает:

custom_optimizer = tf.keras.optimizers.Adam(lr=0.0001)
model.compile(optimizer=custom_optimizer, loss="sparse_categorical_crossentropy", metrics = ['acc'])

проверьте эту ссылку, которая является реализацией CNN, которая близка к вашей https://gist.github.com/RyanAkilos/3808c17f79e77c4117de35aa68447045

...