Detail:
GPU : GTX 1080
Pelatihan : ~ 1,1 Juta gambar milik 10 kelas
Validasi : ~ 150 Ribu gambar milik 10 kelas
Waktu per Zaman : ~ 10 jam
Saya sudah menyiapkan CUDA, cuDNN dan Tensorflow (GPU Tensorflow juga).
Saya tidak berpikir model saya yang rumit yang membutuhkan waktu 10 jam per zaman. Saya bahkan memeriksa apakah GPU saya adalah masalahnya tetapi ternyata tidak.
Apakah waktu pelatihan karena lapisan yang terhubung sepenuhnya?
Model saya:
model = Sequential()
model.add()
model.add(Conv2D(64, (3, 3), padding="same", strides=2))
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), padding="same", strides=2))
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(3, 3), strides=2))
model.add(Flatten())
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dense(4096))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('softmax'))
model.summary()
opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)
model.compile(loss='categorical_crossentropy',
optimizer=opt,
metrics=['accuracy']
)
Karena ada banyak data saya menggunakan ImageDataGenerator.
gen = ImageDataGenerator(
horizontal_flip=True
)
train_gen = gen.flow_from_directory(
'train/',
target_size=(512, 512),
batch_size=5,
class_mode="categorical"
)
valid_gen = gen.flow_from_directory(
'validation/',
target_size=(512, 512),
batch_size=5,
class_mode="categorical"
)
machine-learning
python
keras
Pradyumna Rahul
sumber
sumber
Jawaban:
Itu tentang yang diharapkan. Jika Anda membagi jumlah detik dengan jumlah gambar yang Anda proses, Anda mendapatkan 33 milidetik per gambar, yang sepertinya tepat untuk jaringan sekecil itu. Jaringan yang lebih besar biasanya mengambil rata-rata 50 hingga 200 milidetik per gambar.
Ya, lapisan padat besar kemungkinan akan merusak kinerja Anda, karena itu adalah matriks besar (256 oleh 4096) dan perkalian matriks besar untuk menyertainya setiap kali Anda menjalankan jaringan.
sumber
Seperti kata shimao, itu tentang apa yang kamu harapkan. Meskipun tidak memiliki banyak lapisan, ukuran input 512x512 adalah gambar besar yang harus dibelit. Waktu komputasi yang besar kemungkinan lebih karena menggabungkan 64 filter pada gambar besar, daripada lapisan yang sepenuhnya terhubung.
Jaringan yang Anda kumpulkan memiliki hambatan informasi yang lucu di dalamnya. Anda memulai dengan 64 filter pada gambar berukuran asli, hanya berkurang karena ukuran gambar Anda berkurang. Saat gambar melewati jaringan Anda, fitur yang Anda pelajari menjadi lebih dan lebih abstrak dan kompleks. Lapisan Conv2D (32, (3, 3)) Anda pada dasarnya membatasi jaringan untuk mempelajari peta 128x128 dengan 32 fitur.
Sebagian besar arsitektur jaringan menggandakan jumlah fitur setiap kali mereka pool, dan arsitektur imagenet terbaru benar-benar membuang lapisan yang sepenuhnya terhubung dalam mendukung kolam rata-rata di atas peta fitur akhir, dan pada dasarnya melakukan regresi logistik pada output pool itu.
Coba mulai dengan lebih sedikit filter, katakan 16 di lapisan konvolusi pertama Anda, dua kali lipat setiap kali Anda melangkah atau menyatu. Lakukan ini beberapa kali lebih banyak daripada Anda, untuk meningkatkan bidang penerimaan dan mengurangi ukuran peta fitur. Lakukan ini hingga 64x64 atau 32x32, yang akan menjadi 128 atau 256 filter. Anda dapat menggunakan Keras 'Global Avg atau Max pooling untuk menghilangkan lapisan yang terhubung sepenuhnya juga. Itu seharusnya sekitar dua kali lipat kecepatan jaringan, dan saya akan mengharapkan peningkatan akurasi pada saat yang sama.
sumber