현재 훈련 된 네트워크를 사용하고 this dataset에서 테스트하려고합니다. 원래 VGG19를 사용하여 마지막 120 개 클래스에 맞게 분류 자만 미세 조정했습니다. 모든 교육을 통해 교육을 받으면 실적을 향상시킬 수 있습니다. 문제는 모델이 매우 느리다는 것입니다 (심지어 밤에 실행하게해도 몇 개의 신기원을 갖고 약 45 %의 정확도에 도달합니다. GPU GTX 1070을가집니다).Keras - 분류기가 사전 학습 된 모델의 전송 값에서 학습하지 않음
내 생각으로는이 모델의 모든 레이어를 동결시켜야하고 10k 이미지 만 있고 마지막 몇개의 덴스 레이어 만 트레이닝하지만 여전히 실제 속도는 아닙니다.
this video (약 2 분 30 초)을 본 후에 InceptionResnetv2를 사용하여 전송 값의 원칙을 재현하기로 결정했습니다.
모든 그림을 처리하고 출력을 다음 코드로 수치가 낮은 행렬에 저장했습니다.
# Loading pre-trained Model + freeze layers
model = applications.inception_resnet_v2.InceptionResNetV2(
include_top=False,
weights='imagenet',
pooling='avg')
for layer in model.layers:
layer.trainable = False
# Extraction of features and saving
a = True
for filename in glob.glob('train/resized/*.jpg'):
name_img = os.path.basename(filename)[:-4]
class_ = label[label["id"] == name_img]["breed"].values[0]
input_img = np.expand_dims(np.array(Image.open(filename)), 0)
pred = model.predict(input_img)
if a:
X = np.array(pred)
y = np.array(class_)
a = False
else:
X = np.vstack((X, np.array(pred)))
y = np.vstack((y, class_))
np.savez_compressed('preprocessed.npz', X=X, y=y)
X는 모양의 매트릭스 (10222, 1536)이며 y는 (10222, 1)입니다.
후에 분류기 (여러 토폴로지)를 설계했는데 왜 어떤 학습을 수행 할 수 없는지 전혀 알지 못합니다. 나는, 토폴로지, 활성화 기능을 변경 드롭 아웃을 추가 아무것도하지만, 어떤 개선을 생성하지하려고
Train on 9199 samples, validate on 1023 samples
Epoch 1/100
9199/9199 [==============================] - 2s 185us/step - loss: 15.9639 - acc: 0.0096 - val_loss: 15.8975 - val_acc: 0.0137
Epoch 2/100
9199/9199 [==============================] - 1s 100us/step - loss: 15.9639 - acc: 0.0096 - val_loss: 15.8975 - val_acc: 0.0137
Epoch 3/100
9199/9199 [==============================] - 1s 98us/step - loss: 15.9639 - acc: 0.0096 - val_loss: 15.8975 - val_acc: 0.0137
Epoch 4/100
9199/9199 [==============================] - 1s 96us/step - loss: 15.9639 - acc: 0.0096 - val_loss: 15.8975 - val_acc: 0.0137
Epoch 5/100
9199/9199 [==============================] - 1s 99us/step - loss: 15.9639 - acc: 0.0096 - val_loss: 15.8975 - val_acc: 0.0137
Epoch 6/100
9199/9199 [==============================] - 1s 96us/step - loss: 15.9639 - acc: 0.0096 - val_loss: 15.8975 - val_acc: 0.0137
: 아래에서
# Just to One-Hot-Encode labels properly to (10222, 120)
label_binarizer = sklearn.preprocessing.LabelBinarizer()
y = label_binarizer.fit_transform(y)
model = Sequential()
model.add(Dense(512, input_dim=X.shape[1]))
# model.add(Dense(2048, activation="relu"))
# model.add(Dropout(0.5))
# model.add(Dense(256))
model.add(Dense(120, activation='softmax'))
model.compile(
loss = "categorical_crossentropy",
optimizer = "Nadam", # I tried several ones
metrics=["accuracy"]
)
model.fit(X, y, epochs=100, batch_size=64,
callbacks=[early_stop], verbose=1,
shuffle=True, validation_split=0.10)
모델의 출력을 찾을 수 있습니다.
나는이 일을하는 과정에서 무엇이 잘못되었는지 전혀 모른다. X 행렬이 올바르지 않습니까? 사전 훈련 된 모델을 피쳐 추출기로만 사용하고 두 번째 모델로 분류를 수행 할 수 있습니까? 당신의 의견에 대한
많은 감사, 감사 니콜라스
정말 고마워요! 훈련 시간을 많이 절약 해 줬어. –