Я собираюсь классифицировать изображения (10 классов), используя трансферное обучение с vgg16, предварительно обученным на cifar10.
x_train имеет 2000 изображений (100 знаменитостей по 20 изображений каждое), а x_test имеет 1000 изображений (100 знаменитостей с 10 изображений каждое).
Я несколько раз пробовал с разными настройками, я получаю такие результаты, которые имеют увеличивающиеся допустимые потери и слишком низкую допустимую точность (также низкую точность поезда).
Я не могу разобраться в проблеме ... Если вам нужна дополнительная информация о коде, дайте мне знать :)
val_loss graph1
результат val_loss graph2
print(len(x_train))=2000
print(len(y_train))=2000
print(len(x_test))=1000
print(len(y_test))=1000
print(x_train.shape)=(2000, 32, 32, 3)
print(y_train.shape)=(2000, 100)
print(x_test.shape)=(2000, 32, 32, 3)
print(y_test.shape)=(2000, 100)
# all type is numpy.ndarray
# loading pretrained VGG16-cifar10
prevgg = VGG16(weights='/content/drive/My Drive/vgg16cifar10.h5',
include_top=True,
input_shape=(32, 32, 3),
classes=10)
prevgg.layers.pop()
newvgg = Sequential()
for layer in prevgg.layers:
layer.trainable = False
newvgg.add(layer)
newvgg.add(layers.Dense(100, activation='softmax'))
newvgg.compile(loss='categorical_crossentropy',
optimizer=optimizers.Adam(lr=0.01),
metrics=['acc'])
es = EarlyStopping(monitor='val_loss', patience=500)
X_train, x_val, Y_train, y_val = train_test_split(x_train, y_train, test_size=0.1, random_state=1)
history = newvgg.fit(X_train,
Y_train,
batch_size=128,
epochs=100,
callbacks=[es],
validation_data=(x_val, y_val))