Tensorflow'da evrişimli NN eğitimi için önceden eğitilmiş ağırlık nasıl kullanılır?
Deneyimde, imagenet üzerinde cifar10 ile evrişimli NN (CNN) eğitmek istiyorum ve kullandım ResNet50
. Cifar10, 32x32x3 resim kümesi olduğundan, 224x224x3 ResNet50
kullanır. Bunu yapmak için, CNN'i eğitmek için giriş görüntüsünü yeniden boyutlandırmam gerekiyor imagenet
. Bununla birlikte, CNN
imagenet üzerinde basit eğitim girişiminin ardından geldim:
şu anki denemem :
Lütfen bu özdeki tüm uygulamama bakın :
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))
ama bu girişim bana verdi ResourceExhaustedError
; Bu hatayı daha önce yaşadım ve değiştirerek batch_size
hatayı kaldırdım. Ama şimdi bile batch_size
olabildiğince küçük değiştim ve yine de hatayla karşılaşıyorum. Yukarıda imagenet üzerinde CNN eğitiminin yolunun doğru olmadığını veya girişimimde yanlış bir şey olabileceğini merak ediyorum.
güncelleme :
Evrişimli NN'yi eğitmek için önceden eğitilmiş ağırlıkların (yani, imagenet üzerinde ResNet50) nasıl kullanılacağını anlamak istiyorum; Bunu tensorflow'da nasıl yapacağımdan emin değilim. Bunu doğru yapmak için herhangi bir olası uygulanabilir yaklaşım sunabilir mi? Teşekkürler
Birisi bana girişimimde neyin yanlış gittiğini gösterebilir mi? CNN
Imagenet üzerinde cifar10 ile son teknoloji modeli eğitmenin doğru yolu ne olabilir ? Herhangi biri olası düşünceleri veya bunu yapmanın etkili bir yolunu tensorflow'da paylaşabilir mi? Herhangi bir fikir? Teşekkürler!
Yanıtlar
Belleği (RAM) tüm verilere aynı anda ayırmaya çalıştığınız için bu hatayı alıyor olabilirsiniz. numpy
Başlangıç olarak, görüntüleri saklamak için arrat kullanıyor olabilirsiniz , ardından bu görüntüler dönüştürülüyor tensors
. Yani herhangi bir şey oluşturmadan önce bile 2X belleğiniz var. Üstelik resnet
çok ağır bir model olduğu için tüm verileri aynı anda aktarmaya çalışıyorsunuz. Modellerin çalışmasının nedeni budur batches
. tf.data.Dataset
Belgeleri kullanarak bir jeneratör oluşturmaya çalışın veya çok kolay olan keras.preprocessing.Image.ImageDataGenerator
sınıfı kullanın . Kullanımı çok kolaydır. Görüntü dosyalarınızın adresini Datarame
, sınıfı ve kullanımı temsil eden başka bir sütunla birlikte sütuna kaydedebilirsiniz .flow_from_directory
. Veya flow_from_directory
dizinde kayıtlı görüntüleriniz varsa kullanabilirsiniz .
Belgeleri inceleyin