टेंसोफ़्लो में दृढ़ एनएन के प्रशिक्षण के लिए पूर्व-प्रशिक्षित वजन का उपयोग कैसे करें?
अपने प्रयोग में, मैं कल्पना पर एनआईएफ (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 के साथ अत्याधुनिक मॉडल के प्रशिक्षण का सही तरीका क्या होगा ? क्या कोई भी संभव विचार या कुशल तरीके को टेंसरफ्लो में साझा कर सकता है? कोई उपाय? धन्यवाद!
जवाब
हो सकता है कि आपको यह त्रुटि मिल रही हो क्योंकि आप एक ही बार में पूरे डेटा को मेमोरी (RAM) आवंटित करने का प्रयास कर रहे हैं। शुरुआत के लिए, आप numpy
छवियों को संग्रहीत करने के लिए एराट का उपयोग कर रहे होंगे, फिर उन छवियों को परिवर्तित किया जा रहा है tensors
। तो आपके पास कुछ भी बनाने से पहले ही 2X मेमोरी है। उसके शीर्ष पर, resnet
बहुत भारी मॉडल है इसलिए आप एक ही बार में संपूर्ण डेटा पास करने का प्रयास कर रहे हैं। यही कारण है कि मॉडल के साथ काम करते हैं batches
। tf.data.Dataset
प्रलेखन का उपयोग करके या बहुत आसान keras.preprocessing.Image.ImageDataGenerator
वर्ग का उपयोग करके एक जनरेटर बनाने की कोशिश करें । यह इस्तेमाल में बहुत आसान है। आप अपनी छवि फ़ाइलों के पते Datarame
को वर्ग और उपयोग का प्रतिनिधित्व करने वाले दूसरे कॉलम के साथ कॉलम में सहेज सकते हैं .flow_from_directory
। या flow_from_directory
यदि आप अपनी छवियों को निर्देशिका में सहेजा है, तो आप उपयोग कर सकते हैं ।
दस्तावेज की जाँच करें