При добавлении model.save(...) модель хуже обучается
Я по датасету с huggung face обучаю модель по жестам рук определять букву английского алфавита. Вот код:
from datasets import load_dataset
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.python.keras.utils.np_utils import to_categorical
ds = load_dataset("Marxulia/asl_sign_languages_alphabets_v02")
images = ds["train"]["image"]
train_labels = ds["train"]["label"]
train_images = []
for i in images:
train_images.append(np.array(i.convert("L").resize((150,150))))
print(len(train_images))
train_images = np.array(train_images)
train_images = train_images / 255.0
train_labels = to_categorical(train_labels)
model = Sequential([
Flatten(input_shape=(150, 150)),
Dense(128,activation="relu"),
Dense(64,activation="relu"),
Dense(26,activation="softmax")
])
model.compile(optimizer="adam",loss='categorical_crossentropy',metrics=['accuracy'])
model.fit(train_images,train_labels,epochs=1000)
#model.save("model.keras")
В конце у меня закомментировано model.save("model.keras"), т. е. сохранение модели. И я тут заметил, то что без этой строчки кода функция потерь возвращает лучше прогресс, то есть он к последней эпохе почти 0 (Возвращает значения от 0 до 0.5). А, добавляя эту строчку, прогресс стоит на месте, и функция потерь в течение всех эпох возвращает около 3,25. Меня эта взаимосвязь очень пугает, и я думаю как сделать так, чтоб можно было без таких вот проблем сохранять модель.
Ответы (1 шт):
model.save() никак не должен влиять на процесс обучения модели. Метрики модели (не только нейросети, но и многих других МЛ моделей) могут меняться от запуска к запуску из-за того, что в обучении модели играет роль случайность - у нейросети, например, веса инициализируются случайным образом. Чтобы зафиксировать случайность и точно проверить, влияет ли сохранение на метрики, стоит зафиксировать random seed