Eu sunt de învățare Tensorflow și sunt încercarea de a construi un clasificator pe Moda MNIST set de date. Pot potrivi modelul, dar când am încerca să prezică pe setul de testare primesc următoarea eroare:
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
Eu nu primesc o eroare dacă am prezis pe X_test în loturi, de exemplu:
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]
Am petrecut ceva timp pe google și se uită la alte exemple de aceeași eroare, dar încă nu pot da seama ce fac gresit. Am încercat câteva lucruri diferite, cum ar fi aplicarea pe scară și să se extindă dimensiunile pașii manual pentru X_train și X_test înainte de a construi modelul, dar pentru a obține același rezultat.
Acest lucru este meu de cod complet (folosind Python 3.7.12 și Tensorflow 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)
Care dă
InvalidArgumentError: ConcatOp : Dimensions of inputs should match: shape[0] = [1,32,10] vs. shape[312] = [1,16,10] [Op:ConcatV2] name: concat