keras中model.predict中遇到的维度问题和暂时解决方式(求大佬看到解决一下)

在学习分类的时候,mnist数据集分类尝试时,因为训练维度的原因,教程中都是

model.predict([[X_train[0]]])

这里说明是:因为训练维度为 3 维,所以需要添加 2 层 [ ], 可是在我添加之后产生了如下问题

在这里插入图片描述
在这里插入图片描述

问题 :

问题是在访问数据集中单张图片时产生错误

下面为错误代码 :

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

gpus = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(gpus[0], True)

mnist = tf.keras.datasets.mnist
(train_x, train_y), (test_x, test_y) = mnist.load_data("C:/Users/你的用户名/.keras/datasets/mnist.npz") # 导入数据集

# X_train = train_X.reshape((60000, 28*28))
# X_test  = test_X.reshape((10000, 28*28)) # 变换输入维度,这里使用 tf.keras,layers.Flatten()

X_train, X_test = tf.cast(train_x/255.0, tf.float32), tf.cast(test_x/255.0, tf.float32)
y_train, y_test = tf.cast(train_y/255.0, tf.float32), tf.cast(test_y/255.0, tf.float32) # 为加快迭代速度,属性归一化,且转换为tensor张量

# 建立模型
model = tf.keras.Sequential() # 选择模型
model.add(tf.keras.layers.Flatten(input_shape = (28, 28))) # 说明输入层形状,转换形状,拉直变成一维数组,line 12, 13
model.add(tf.keras.layers.Dense(128, activation = 'relu')) # 添加 Hidden 层,128 神经元, relu 激活函数
model.add(tf.keras.layers.Dense(10, activation = 'softmax')) # 添加 Output 层, 10 个类别神经元, softmax 激活函数,多分类
# model.summary() # 查看神经网络信息

# 配置模型训练方法
model.compile(optimizer = 'adam',
              loss = 'sparse_categorical_crossentropy',
              metrics = 'sparse_categorical_accuracy')  # 选择优化梯度算法 adam, 稀疏交叉熵损失函数, 稀疏分类准确率函数

# 训练模型
model.fit(X_train, y_train, batch_size = 64, epochs = 5, validation_split = 0.2) # 划分 20% 作为测试集 64数据每批次,一共训练 5 轮

# 评估模型
model.evaluate(X_test, y_test, verbose = 2) # 使用本身测试集评估

# 使用模型
model.predict([[X_test[0]]]) # predict 中,参数维数和训练集一致,所以给出归一化后属性值,训练集属性为 3 维数组,需要 2 层方括号
np.argmax(model.predict([[X_test[0]]])) # 使用 argmax 得到最大概率索引值

为此我猜测可能是维度问题,因为在model.predict(X_test[0:4])中,并未产生问题,于是修改了部分代码,如下:

# 使用模型
demo = tf.constant((test_x[0]/255.0).reshape(1, 28, 28), dtype=tf.float32)  # 变换一下维度先归一化后 reshape 成 3 维再转换Tensor

model.predict(demo)  # predict 中,参数维数和训练集一致,所以给出归一化后属性值,训练集属性为 3 维数组,需要 2 层方括号
np.argmax(model.predict(demo))

先将测试集第一张图片归一化后 reshape 为 3 维形状,再转换成 Tensor 张量,发现可以使用,成功输出了 7
在这里插入图片描述

mnist数据集的第一张图片

但是在成功输出的同时,伴随有以下警告 :

在这里插入图片描述
版本信息为 :

在这里插入图片描述
暂时先问以下这个问题吧,希望看到的大佬可以评论留下解决方法,小白不胜感激!!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: keras.model.predict是一个使用Keras模型进行预测的函数。它接受一个输入数据并输出预测结果。该函数可以用于各种深度学习任务,包括图像分类、文本分类、回归等等。在使用前,需要先编译模型并加载权重文件。 ### 回答2: Keras是一个高级神经网络API,可以运行在Tensorflow、Theano、CNTK等深度学习框架之上,致力于使深度学习模型的构建和训练快速、简单和易扩展。KerasPython的一个库,其包含了一个专业的高级深度学习框架,提供了一些便捷易用的API,包装了TensorFlow、Theano、CNTK等深度学习框架,使得人们能够很容易的构建、训练和部署深度学习模型。其Keras的一个重要特性就是提供了一个大量的预处理和模型定义API,其包括了Keras.model.predict函数。Keras.model.predict函数是Keras模型最常用的函数之一,用于将一组输入数据作为输入,产生一组相应的输出。具体来说,使用Keras.model.predict函数需要按照以下步骤: 1. 构建模型:首先,需要构建好模型,这可以通过使用Keras的模型构建API完成。这里举例说明最常用的三种构建模型的方法。 (1)Sequential模型:这种模型支持多层神经网络,按照顺序添加层。 (2)函数式API:此种模型使用Keras的函数式API来创建模型,支持任意网络拓扑结构。 (3)模型子类化:在此种模型,用户需要自己定义模型类,实现构建网络过程。 2. 加载训练好的模型:如果模型已经被训练好了,那么就需要加载模型。 3. 输入测试数据:使用Keras.model.predict函数的第一步就是准备输入数据。 4. 进行预测:通过调用Keras.model.predict函数来进行预测。Keras.model.predict函数支持的参数的说明如下: (1)x:输入测试数据,可以是NumPy数组、Tensor或输入字典的组合。 (2)batch_size:设置网络的批大小。 (3)verbose:控制预测过程是否输出日志信息。 (4)steps:预测数据的批次数。 (5)callbacks:设置在预测过程需要调用的回调函数。 Keras.model.predict函数的输出为预测结果。需要注意的是,predict函数对于一个完整的输入数据集进行预测,并返回一个数组,其每个元素都是一个预测结果。预测结果可以进行后续处理,例如分类或回归分析。总的来说,Keras.model.predict函数提供了一个非常便捷的API,用于测试训练好的神经网络模型,且易于使用,适用于许多实际场景的应用。 ### 回答3: keras是一个使用Python编写的开源深度学习框架,它简单易用且功能强大,被广泛应用于各种机器学习和深度学习任务。其keras.model.predict函数是keras非常重要的一个函数,可以用于对训练好的模型进行预测。 具体来说,keras.model.predict函数用于对输入数据进行预测,并返回相应的预测结果。其基本语法如下: ``` predict(x, batch_size=None, verbose=0, steps=None) ``` 其x表示输入数据,batch_size表示每次输入数据的数量,verbose表示是否显示预测的详细信息,steps表示每次迭代的步数。在使用keras.model.predict函数时,我们需要注意以下几点: 首先,我们需要将输入数据转换成模型接受的格式,通常是通过对数据进行归一化处理,并将其转换成numpy数组的形式。 其次,我们需要对输入数据进行预处理,通常是通过对数据进行缩放或者旋转等操作,从而增加模型的鲁棒性。 最后,我们需要根据实际情况选择合适的batch_size和steps参数,从而控制预测的速度和精度。 总的来说,keras.model.predict函数是keras框架非常重要的一个函数,它可以用于对训练好的模型进行预测,并提供了各种参数设置,从而让我们能够更加灵活地进行预测操作。如果我们想要进一步利用keras进行深度学习的研究和应用,那么对此函数的认识和掌握是非常必要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值