TensorFlow单张图片预测报错:输入形状不兼容问题求助
问题:TensorFlow预测单张Fashion-MNIST图片时输入形状不兼容报错
相关代码
# =========加载fashion_mist数据集=================== import tensorflow as tf from tensorflow import keras fashion_mist = keras.datasets.fashion_mnist (train_images, train_labels), (test_images,test_labels) = fashion_mist.load_data() # 上方的变量依次对应 训练的图片, 训练的标签, 测试的图片, 测试的标签 # ===================================================== # 尝试对单张测试图片执行预测操作 # =======预测单张图片=========== print(test_labels[0]) print(model.predict([[test_images[0]/255]]))
报错信息
WARNING:tensorflow:Model was constructed with shape (None, 28, 28) for input KerasTensor(type_spec=TensorSpec(shape=(None, 28, 28), dtype=tf.float32, name='flatten_13_input'), name='flatten_13_input', description="created by layer 'flatten_13_input'"), but it was called on an input with incompatible shape (None, 28).
解决方法
报错核心是输入形状不匹配:模型训练时定义的输入形状是(None, 28, 28)(None代表批量维度,后面是28×28的单通道图片),但你传入的输入形状是(None, 28),缺少了一个维度。
方式一:扩展输入维度,补全批量维度
直接使用TensorFlow或NumPy的维度扩展方法,把单张图片的形状从(28,28)转换成(1,28,28)(1代表批量大小为1):# TensorFlow方式扩展维度 print(model.predict(tf.expand_dims(test_images[0]/255, axis=0))) # NumPy方式扩展维度(需先导入numpy) import numpy as np print(model.predict(np.expand_dims(test_images[0]/255, axis=0)))方式二:用切片获取单张图片,自动保留维度
通过切片取第一张测试图,切片操作会自动保留批量维度,无需手动扩展:print(model.predict(test_images[0:1]/255))
内容的提问来源于stack exchange,提问作者王云湖不归
相关产品推荐
相关产品推荐

