InvalidArgumentError: ConcatOp : आयाम के इनपुट से मेल खाना चाहिए जब भविष्यवाणी पर X_test के साथ Conv2D - क्यों?

0

सवाल

मैं सीख रहा हूँ ... बदलेगी देश और कोशिश कर रहा हूँ का निर्माण करने के लिए एक क्लासिफायरफ़ाइल पर फैशन MNIST डेटासेट. मैं कर सकते हैं मॉडल फिट है, लेकिन जब मैं भविष्यवाणी करने की कोशिश पर अपने परीक्षण सेट मैं निम्नलिखित त्रुटि मिलती है:

y_pred = model.predict(X_test).argmax(axis=1)

InvalidArgumentError: ConcatOp : Dimensions of inputs should match: shape[0] = [1,32,10] vs. shape[312] = [1,16,10] [Op:ConcatV2] name: concat

मैं नहीं एक त्रुटि मिलती है अगर मैं भविष्यवाणी पर X_test बैचों में, उदाहरण के लिए:

y_pred = []
step_size = 10
for i in trange(0, len(X_test), step_size):
  y_pred += model.predict(X_test[i:i+step_size]).argmax(axis=1).tolist()[0]

मैं कुछ समय बिताया है googling और पर देख रहे हैं के अन्य उदाहरण इस एक ही त्रुटि है, लेकिन अभी भी नहीं कर सकते हैं बाहर आंकड़ा क्या मैं गलत कर रहा हूँ. मैंने कोशिश की है कुछ अलग अलग चीजें हैं, इस तरह के रूप में आवेदन के पैमाने पर विस्तार और आयाम कदम मैन्युअल रूप से करने के लिए X_train और X_test के निर्माण से पहले के मॉडल है, लेकिन एक ही परिणाम प्राप्त.

यह मेरा पूरा कोड (अजगर का उपयोग कर 3.7.12 और ... बदलेगी देश 2.7.0):

import tensorflow as tf # 2.7.0
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# load data 
mnist = tf.keras.datasets.fashion_mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()

# Build model 

# Input 
inputs = tf.keras.Input(shape=X_train[0].shape)

# # Scale 
x = tf.keras.layers.Rescaling(scale=1.0/255)(inputs)

# Add extra dimension for use in conv2d
x = tf.expand_dims(x, -1)

# Conv2D
x = tf.keras.layers.Conv2D(filters=32, kernel_size=(3, 3), activation="relu", strides=2)(x)
x = tf.keras.layers.Conv2D(filters=64, kernel_size=(3, 3), activation="relu", strides=2)(x)
x = tf.keras.layers.Conv2D(filters=128, kernel_size=(3, 3), activation="relu", strides=2)(x)

# Flatten
x = tf.keras.layers.Flatten()(x),
x = tf.keras.layers.Dropout(rate=.2)(x)  # 20% chance of dropout  
x = tf.keras.layers.Dense(512, activation='relu')(x)
x = tf.keras.layers.Dropout(rate=.2)(x)   
x = tf.keras.layers.Dense(K, activation='softmax')(x)

model = tf.keras.Model(inputs=inputs, outputs=x)

# Compile
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# Fit
r = model.fit(X_train, y_train, validation_data=[X_test, y_test], epochs=10)

# Throws an error
y_pred = model.predict(X_test).argmax(axis=1)

देता है, जो

InvalidArgumentError: ConcatOp : Dimensions of inputs should match: shape[0] = [1,32,10] vs. shape[312] = [1,16,10] [Op:ConcatV2] name: concat
1

सबसे अच्छा जवाब

1

के साथ model.predict आप कर रहे हैं बनाने की भविष्यवाणियों पर बैचों के रूप में कहा गया है यहाँ:

गणना में किया जाता है बैचों. इस विधि के लिए बनाया गया है बैच संसाधन की बड़ी संख्या आदानों की. यह उपयोग के लिए इरादा नहीं के अंदर है कि छोरों पर पुनरावृति करने के लिए अपने डेटा और प्रक्रिया संख्या आदानों की एक समय में.

लेकिन आकार के X_test नहीं है, समान रूप से विभाज्य द्वारा डिफ़ॉल्ट batch_size=32. मुझे लगता है कि यह हो सकता है आपकी समस्या का कारण. आप बदल सकता है अपने batch_size 16 करने के लिए उदाहरण के लिए और यह काम करेगा:

y_pred = model.predict(X_test, batch_size=16).argmax(axis=1)
print(y_pred)
[[ 8  0  2 ... 14  8  2]
 [15 15  8 ... 10  8 14]
 [ 5 13  4 ...  4  5  6]
 ...
 [11 11 12 ...  7  2  3]
 [ 3  8  0 ... 15  3 14]
 [ 3 13  1 ...  1 15  0]]

आप भी इस्तेमाल कर सकते model.predict_on_batch(X_test) बनाने के लिए भविष्यवाणियों के लिए एक ही बैच के नमूने. हालांकि, आप सबसे अधिक कर रहे हैं लचीला उपयोग करते हैं, तो कॉल समारोह के अपने मॉडल सीधे:

y_pred = model(X_test[:10])
tf.print(tf.argmax(y_pred, axis=1), summarize=-1)
[[2 8 0 1 1 1 8 2 2 6]]
2021-11-22 13:44:08

धन्यवाद, कि काम करता है!! मैं थोड़ा के बारे में उलझन में 'बैच' तर्क - क्या होगा अगर मेरे नमूना आकार एक प्रधानमंत्री की संख्या? की तरह लग रहा है मैं क्या करने की आवश्यकता होगी और अधिक पढ़ने के बारे में भविष्यवाणियों :)
hulky.smash

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में