Bagaimana cara menggunakan beban pra-terlatih untuk melatih NN konvolusional dalam tensorflow?

Aug 18 2020

Dalam percobaan saya, saya ingin melatih convolutional NN (CNN) dengan cifar10 di imagenet, dan saya menggunakan ResNet50. Karena cifar10 adalah kumpulan gambar ResNet5032x32x3 sedangkan menggunakan 224x224x3. Untuk melakukannya, saya perlu mengubah ukuran gambar input untuk melatih CNN imagenet. Namun, saya datang menindaklanjuti upaya untuk melatih sederhana CNNdi imagenet:

usaha saya saat ini :

Silakan lihat seluruh penerapan saya dalam inti ini :

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))

tapi upaya ini memberi saya ResourceExhaustedError; Saya terjadi kesalahan ini sebelumnya dan mengubah batch_sizemenghapus kesalahan. Tetapi sekarang bahkan saya berubah batch_sizesekecil mungkin, dan masih berakhir dengan kesalahan. Saya bertanya-tanya cara pelatihan CNN tentang imagenet di atas mungkin tidak benar atau ada yang salah dalam upaya saya.

perbarui :

Saya ingin memahami bagaimana menggunakan bobot pra-terlatih (yaitu, ResNet50 di imagenet) untuk melatih NN konvolusional; Saya tidak yakin bagaimana melakukan ini dalam tensorflow. Adakah yang bisa memberikan pendekatan yang memungkinkan untuk mendapatkan hak ini? Terima kasih

Adakah yang bisa menunjukkan kepada saya apa yang salah dengan upaya saya? Apa cara yang benar untuk melatih CNNmodel mutakhir dengan cifar10 di imagenet? Adakah yang bisa berbagi pemikiran yang mungkin atau cara yang efisien untuk melakukan ini dalam tensorflow? Ada ide? Terima kasih!

Jawaban

Deshwal Aug 18 2020 at 10:44

Anda mungkin mendapatkan kesalahan ini karena Anda mencoba mengalokasikan memori (RAM) ke seluruh data sekaligus. Sebagai permulaan, Anda mungkin menggunakan numpyarrat untuk menyimpan gambar, lalu gambar tersebut akan dikonversi tensors. Jadi, Anda sudah memiliki 2X memori bahkan sebelum membuat apa pun. Selain itu, resnetadalah model yang sangat berat sehingga Anda mencoba meneruskan seluruh data sekaligus. Itulah mengapa model dapat digunakan batches. Cobalah membuat generator dengan menggunakan tf.data.Dataset dokumentasi atau gunakan kelas yang sangat mudah keras.preprocessing.Image.ImageDataGenerator. Sangat mudah digunakan. Anda dapat menyimpan alamat file gambar Anda di Dataramekolom dengan kolom lain yang mewakili kelas dan penggunaan .flow_from_directory. Atau Anda dapat menggunakan flow_from_directoryjika Anda memiliki gambar yang disimpan dalam direktori.

Lihat dokumentasinya