Tensorflow'da evrişimli NN eğitimi için önceden eğitilmiş ağırlık nasıl kullanılır?

Aug 18 2020

Deneyimde, imagenet üzerinde cifar10 ile evrişimli NN (CNN) eğitmek istiyorum ve kullandım ResNet50. Cifar10, 32x32x3 resim kümesi olduğundan, 224x224x3 ResNet50kullanır. Bunu yapmak için, CNN'i eğitmek için giriş görüntüsünü yeniden boyutlandırmam gerekiyor imagenet. Bununla birlikte, CNNimagenet ü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_sizehatayı kaldırdım. Ama şimdi bile batch_sizeolabildiğ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? CNNImagenet ü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

Deshwal Aug 18 2020 at 10:44

Belleği (RAM) tüm verilere aynı anda ayırmaya çalıştığınız için bu hatayı alıyor olabilirsiniz. numpyBaş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.ImageDataGeneratorsı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_directorydizinde kayıtlı görüntüleriniz varsa kullanabilirsiniz .

Belgeleri inceleyin