TensorFlow에서 컨벌루션 NN을 훈련하기 위해 사전 훈련 된 가중치를 사용하는 방법은 무엇입니까?
내 실험에서는 imagenet에서 cifar10을 사용하여 convolutional NN (CNN)을 훈련시키고 싶습니다 ResNet50
. cifar10은 32x32x3 이미지 세트이고 224x224x3을 ResNet50
사용하기 때문에. 이렇게하려면 .NET에서 CNN을 훈련시키기 위해 입력 이미지의 크기를 조정해야합니다 imagenet
. 그러나 나는 CNN
imagenet에서 간단한 훈련을 시도했습니다 .
내 현재 시도 :
이 요점에서 전체 구현을 참조하십시오 .
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에서 수행하는 방법을 모르겠습니다. 누구든지이 권리를 얻기 위해 가능한 가능한 접근 방식을 제공 할 수 있습니까? 감사
누구든지 내 시도에 무엇이 잘못되었는지 지적 할 수 있습니까? CNN
imagenet에서 cifar10 으로 최첨단 모델 을 훈련하는 올바른 방법은 무엇입니까 ? 누구나 tensorflow에서 가능한 생각이나 효율적인 방법을 공유 할 수 있습니까? 어떤 생각? 감사!
답변
한 번에 전체 데이터에 메모리 (RAM)를 할당하려고하기 때문에이 오류가 발생할 수 있습니다. 우선 numpy
arrat를 사용하여 이미지를 저장 한 다음 해당 이미지가 tensors
. 따라서 무언가를 생성하기 전에 이미 2 배의 메모리가 있습니다. 또한 resnet
매우 무거운 모델이므로 전체 데이터를 한 번에 전달하려고합니다. 이것이 모델이 batches
. tf.data.Dataset
문서 를 사용하여 생성기를 만들 거나 매우 쉬운 keras.preprocessing.Image.ImageDataGenerator
클래스를 사용하십시오 . 사용하기 매우 쉽습니다. Datarame
클래스를 나타내는 다른 열과 함께 열에 이미지 파일의 주소를 저장 하고 .flow_from_directory
. 또는 flow_from_directory
디렉토리에 이미지를 저장 한 경우 사용할 수 있습니다 .
문서 확인