Ejemplo n.º 1
0
def training():
    train_generator, validation_generator = prepare_data()
    # train_generator, validation_generator, test_generator = prepare_data()

    resnet50_network = ResNet50(include_top=False,
                                weights='imagenet',
                                input_shape=(IMAGE_SIZE, IMAGE_SIZE, 3))

    for layer in resnet50_network.layers[:-3]:
        layer.trainable = False

    model = Sequential()
    model.add(resnet50_network)
    model.add(AveragePooling2D((7, 7), name='avg_pool'))
    model.add(Flatten())
    model.add(
        Dense(train_generator.class_indices.items().__len__(),
              activation='softmax'))
    model.summary()
    model.compile(loss='categorical_crossentropy',
                  optimizer=Adam(lr=0.001),
                  metrics=['accuracy'])

    early_stopping = EarlyStopping(patience=10)
    checkpointer = ModelCheckpoint(filepath='car_resNet50_best.h5',
                                   verbose=0,
                                   save_best_only=True)

    csv_logger = CSVLogger('ResNet50_training_log.csv',
                           append=True,
                           separator=';')

    history = model.fit_generator(
        train_generator,
        steps_per_epoch=train_generator.samples / train_generator.batch_size,
        epochs=EPOCHS,
        callbacks=[early_stopping, checkpointer, csv_logger],
        validation_data=validation_generator,
        validation_steps=validation_generator.samples /
        validation_generator.batch_size)

    # evaluate_scores = model.evaluate_generator(generator=test_generator)

    model.save('car_resNet50_final.h5')
    model.sample_weights('resNet50_weights')
    show_history(history)
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))  # output layer

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

# Print a summery of the model
# model.summary()

# Training the model
model.fit(
    x=x_train,
    y=y_train,
    batch_size=32,
    epochs=30,
    validation_data=(x_test, y_test),
    shuffle=True
)

# Save neural network structure
model_structure = model.to_json()
file = Path('model_structure.json')
file.write_text(model_structure)

# Save neural network's trained weight
model.sample_weights('model_weights.h5')