33 lines
1.2 KiB
Python
33 lines
1.2 KiB
Python
|
import os
|
||
|
import random
|
||
|
|
||
|
import matplotlib.pyplot as plt
|
||
|
import numpy as np
|
||
|
from tensorflow.keras.applications import MobileNetV2
|
||
|
from tensorflow.keras.applications.mobilenet import preprocess_input, decode_predictions
|
||
|
from tensorflow.keras.layers import Dense
|
||
|
from tensorflow.keras.models import Model
|
||
|
from tensorflow.keras.preprocessing.image import ImageDataGenerator
|
||
|
|
||
|
podstawa_modelu = MobileNetV2(weights="imagenet", include_top=False, pooling='avg')
|
||
|
x = podstawa_modelu.output
|
||
|
preds = Dense(7, activation='softmax')(x)
|
||
|
|
||
|
model = Model(inputs=podstawa_modelu.input, outputs=preds)
|
||
|
|
||
|
for layer in model.layers[:50]:
|
||
|
layer.trainable = False
|
||
|
for layer in model.layers[50:]:
|
||
|
layer.trainable = True
|
||
|
|
||
|
train_datagen = ImageDataGenerator(preprocessing_function=preprocess_input)
|
||
|
|
||
|
train_generator = train_datagen.flow_from_directory('./dataset', target_size=(224, 224), color_mode='rgb',
|
||
|
batch_size=32, class_mode='categorical', shuffle=True)
|
||
|
|
||
|
model.compile(optimizer='Adam', loss='categorical_crossentropy', metrics=['accuracy'])
|
||
|
step_size_train = train_generator.n // train_generator.batch_size
|
||
|
model.fit_generator(generator=train_generator, steps_per_epoch=step_size_train, epochs=30)
|
||
|
|
||
|
model.save('neural_model.h5')
|