TensorFlow에서 컨벌루션 NN을 훈련하기 위해 사전 훈련 된 가중치를 사용하는 방법은 무엇입니까?

Aug 18 2020

내 실험에서는 imagenet에서 cifar10을 사용하여 convolutional NN (CNN)을 훈련시키고 싶습니다 ResNet50. cifar10은 32x32x3 이미지 세트이고 224x224x3을 ResNet50사용하기 때문에. 이렇게하려면 .NET에서 CNN을 훈련시키기 위해 입력 이미지의 크기를 조정해야합니다 imagenet. 그러나 나는 CNNimagenet에서 간단한 훈련을 시도했습니다 .

내 현재 시도 :

이 요점에서 전체 구현을 참조하십시오 .

base_model = ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
x = Conv2D(32, (3, 3))(base_model.output)
x = Activation('relu')(x)
x = MaxPooling2D(pool_size=(2,2))(x)
x = Flatten()(x)
x = Dense(256)(x)
x = Dense(10)(x)
x = Activation('softmax')(x)
outputs = x
model = models.Model(base_model.input, outputs)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, y_train, batch_size=50, epochs=3, verbose=1, validation_data=(X_test, y_test))

그러나이 시도는 나에게 주었다 ResourceExhaustedError. 이 오류가 발생하기 전에 변경 batch_size하여 오류를 제거했습니다. 하지만 이제는 batch_size가능한 한 작게 변 했지만 여전히 오류가 발생합니다. 위의 imagenet에서 CNN을 훈련하는 방법이 내 시도에서 정확하지 않거나 잘못된 것일 수 있는지 궁금합니다.

업데이트 :

Convolutional NN을 훈련시키기 위해 사전 훈련 된 가중치 (예 : imagenet의 ResNet50)를 사용하는 방법을 이해하고 싶습니다. 나는 이것을 tensorflow에서 수행하는 방법을 모르겠습니다. 누구든지이 권리를 얻기 위해 가능한 가능한 접근 방식을 제공 할 수 있습니까? 감사

누구든지 내 시도에 무엇이 잘못되었는지 지적 할 수 있습니까? CNNimagenet에서 cifar10 으로 최첨단 모델 을 훈련하는 올바른 방법은 무엇입니까 ? 누구나 tensorflow에서 가능한 생각이나 효율적인 방법을 공유 할 수 있습니까? 어떤 생각? 감사!

답변

Deshwal Aug 18 2020 at 10:44

한 번에 전체 데이터에 메모리 (RAM)를 할당하려고하기 때문에이 오류가 발생할 수 있습니다. 우선 numpyarrat를 사용하여 이미지를 저장 한 다음 해당 이미지가 tensors. 따라서 무언가를 생성하기 전에 이미 2 배의 메모리가 있습니다. 또한 resnet매우 무거운 모델이므로 전체 데이터를 한 번에 전달하려고합니다. 이것이 모델이 batches. tf.data.Dataset 문서 를 사용하여 생성기를 만들 거나 매우 쉬운 keras.preprocessing.Image.ImageDataGenerator클래스를 사용하십시오 . 사용하기 매우 쉽습니다. Datarame클래스를 나타내는 다른 열과 함께 열에 이미지 파일의 주소를 저장 하고 .flow_from_directory. 또는 flow_from_directory디렉토리에 이미지를 저장 한 경우 사용할 수 있습니다 .

문서 확인