मेरे पास एक बहु इनपुट केरस मॉडल है। यहाँ इनपुट:

[<tf.Tensor 'input_1:0' shape=(None, 256, 256, 3) dtype=float32>,
 <tf.Tensor 'input_2:0' shape=(None, 256, 256, 3) dtype=float32>,
 <tf.Tensor 'input_3:0' shape=(None, 256, 256, 3) dtype=float32>,
 <tf.Tensor 'input_4:0' shape=(None, 256, 256, 3) dtype=float32>]

और यहाँ मॉडल का इनपुट आकार:

[(None, 256, 256, 3),
 (None, 256, 256, 3),
 (None, 256, 256, 3),
 (None, 256, 256, 3)]

प्रशिक्षण डेटा आकार इस प्रकार है:

(4, 422, 256, 256, 3)
4 = number of inputs (consist of appended arrays together).
422 = number of training images in each input.
256, 256, 3 = shape of the images

जब मैं fit फ़ंक्शन को कॉल करता हूं:

model.fit(train_x, train_y, validation_split=0.20, epochs=5, batch_size=3)

निम्न त्रुटि हुई:

ValueError: परत conv1_pad_0 का इनपुट 0 परत के साथ असंगत है: अपेक्षित ndim=4, ndim=5 पाया गया। पूर्ण आकार प्राप्त: [३, ४२२, २५६, २५६, ३]

मैंने इस पोस्ट में दिए गए समाधान की कोशिश की है, लेकिन मुझे एक कार्डिनैलिटी में बेमेल।

ValueError: डेटा कार्डिनैलिटी अस्पष्ट है:

मैंने ट्रेन डेटा को बलो की तरह पास करने की कोशिश की है और यह काम कर गया है:

model.fit([train_x[0], train_x[1], train_x[2], train_x[3]], train_y, validation_split=0.20, epochs=5, batch_size=3)

अब अगर मैं अपने मॉडल को 20 इनपुट तक स्केल करना चाहता हूं तो कोड की उपरोक्त पंक्ति समस्याग्रस्त होगी।

अपडेट करें:

मॉडल पूर्व-प्रशिक्षित ResNet50 पर आधारित हैं, सभी इनपुट शीर्ष परतों के बिना एक resnet50 हैं और निम्नलिखित तीन परतों से शुरू होते हैं:

input_1_0 (InputLayer)        [(None, 256, 256, 3) 0  
conv1_pad_0 (ZeroPadding2D)   (None, 262, 262, 3)  0           input_1_0[0][0]
conv1_conv_0 (Conv2D)         (None, 128, 128, 64) 9472        conv1_pad_0[0][0]   

मॉडल के प्रशिक्षण/परीक्षण के लिए डेटा को निम्नानुसार संसाधित किया जाता है:

for row in np.array(tmp_data):
        row = images_preprocessing(row) # Depends on the model used
        train_x, test_x, train_y, test_y = split_data(row, target) # Here the train_test_split is used
        
        train_X.append(train_x)
        test_X.append(test_x)
        train_Y.append(train_y)
        test_Y.append(test_y)
0
asendjasni 28 सितंबर 2020, 18:54

1 उत्तर

सबसे बढ़िया उत्तर

प्रयत्न

train_x_list = [tf.squeeze(tx) for tx in tf.split(train_x, num_or_size_splits=train_x.shape[0], axis=0)]

यह आयाम 0 के साथ प्रशिक्षण डेटा विभाजन के साथ टेंसर की एक सूची तैयार करेगा। फिर अपने दूसरे समाधान का उपयोग करें, सूची को fit() को खिलाएं।

1
Poe Dator 30 सितंबर 2020, 12:00