टेंसोफ़्लो में दृढ़ एनएन के प्रशिक्षण के लिए पूर्व-प्रशिक्षित वजन का उपयोग कैसे करें?

Aug 18 2020

अपने प्रयोग में, मैं कल्पना पर एनआईएफ (CNN) को cifar10 के साथ प्रशिक्षित करना चाहता हूं, और मैंने उपयोग किया ResNet50। चूंकि 224x224x3 का ResNet50उपयोग करते हुए cifar10 छवियों का 32x32x3 सेट है । ऐसा करने के लिए, मुझे CNN को प्रशिक्षित करने के लिए इनपुट छवि का आकार बदलना होगा imagenet। हालाँकि, मैंने CNNकल्पना पर सरल प्रशिक्षण के प्रयास को पूरा किया:

मेरा वर्तमान प्रयास :

कृपया इस gist में मेरा संपूर्ण कार्यान्वयन देखें :

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जितना संभव हो छोटा बदल गया , और अभी भी त्रुटि के साथ समाप्त हो रहा हूं । मैं सोच रहा था कि ऊपर की कल्पना पर CNN को प्रशिक्षित करने का तरीका मेरे प्रयास में सही या गलत नहीं हो सकता है।

अपडेट :

मैं समझना चाहता हूं कि पूर्व-प्रशिक्षित भार (यानी, कल्पना पर ResNet50) का उपयोग करके एनएनएल को कैसे प्रशिक्षित किया जाए; मुझे यकीन नहीं है कि यह टेंसोफ़्लो में कैसे किया जाए। किसी को भी यह अधिकार प्राप्त करने के लिए संभव संभव दृष्टिकोण प्रदान कर सकते हैं? धन्यवाद

क्या कोई मुझे बता सकता है कि मेरे प्रयास में क्या गलत हुआ? CNNकल्पना पर cifar10 के साथ अत्याधुनिक मॉडल के प्रशिक्षण का सही तरीका क्या होगा ? क्या कोई भी संभव विचार या कुशल तरीके को टेंसरफ्लो में साझा कर सकता है? कोई उपाय? धन्यवाद!

जवाब

Deshwal Aug 18 2020 at 10:44

हो सकता है कि आपको यह त्रुटि मिल रही हो क्योंकि आप एक ही बार में पूरे डेटा को मेमोरी (RAM) आवंटित करने का प्रयास कर रहे हैं। शुरुआत के लिए, आप numpyछवियों को संग्रहीत करने के लिए एराट का उपयोग कर रहे होंगे, फिर उन छवियों को परिवर्तित किया जा रहा है tensors। तो आपके पास कुछ भी बनाने से पहले ही 2X मेमोरी है। उसके शीर्ष पर, resnetबहुत भारी मॉडल है इसलिए आप एक ही बार में संपूर्ण डेटा पास करने का प्रयास कर रहे हैं। यही कारण है कि मॉडल के साथ काम करते हैं batchestf.data.Dataset प्रलेखन का उपयोग करके या बहुत आसान keras.preprocessing.Image.ImageDataGeneratorवर्ग का उपयोग करके एक जनरेटर बनाने की कोशिश करें । यह इस्तेमाल में बहुत आसान है। आप अपनी छवि फ़ाइलों के पते Datarameको वर्ग और उपयोग का प्रतिनिधित्व करने वाले दूसरे कॉलम के साथ कॉलम में सहेज सकते हैं .flow_from_directory। या flow_from_directoryयदि आप अपनी छवियों को निर्देशिका में सहेजा है, तो आप उपयोग कर सकते हैं ।

दस्तावेज की जाँच करें