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

本文探讨了在使用MNIST数据集进行分类时,如何处理3维训练维度问题。作者在尝试预测时遇到错误,并通过调整代码将测试图片预处理为3维,解决了维度不匹配的问题。同时,文中提及了警告信息及版本信息,寻求解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习分类的时候,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数据集的第一张图片

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

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

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

这个错误是由于无法连接到本地主机的10248端口导致的。这个端口通常是kubelet进程监听的端口,用于健康检查。出现这个错误可能是由于kubelet进程没有正确启动或者配置错误导致的。 解决这个问题的方法是检查kubelet进程的状态和配置。你可以按照以下步骤进行操作: 1. 检查kubelet进程是否正在运行。你可以使用以下命令检查kubelet进程的状态: ```shell systemctl status kubelet ``` 如果kubelet进程没有运行,你可以使用以下命令启动它: ```shell systemctl start kubelet ``` 2. 检查kubelet的配置文件。你可以使用以下命令查看kubelet的配置文件路径: ```shell kubelet --kubeconfig /etc/kubernetes/kubelet.conf --config /var/lib/kubelet/config.yaml --bootstrap-kubeconfig /etc/kubernetes/bootstrap-kubelet.conf config view ``` 确保配置文件中的端口号和地址正确,并且与你的环境相匹配。 3. 检查网络连接。你可以使用以下命令检查是否可以连接到localhost10248端口: ```shell curl -sSL http://localhost:10248/healthz ``` 如果无法连接,请确保端口没有被防火墙或其他网络配置阻止。 4. 检查docker的配置。有时候,kubelet进程依赖于docker进程。你可以按照以下步骤检查docker的配置: - 创建/etc/docker目录: ```shell sudo mkdir /etc/docker ``` - 编辑/etc/docker/daemon.json文件,并添加以下内容: ```json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ], "registry-mirrors": ["https://tdhp06eh.mirror.aliyuncs.com"] } ``` - 重启docker进程: ```shell systemctl restart docker ``` 请注意,以上步骤是一种常见的解决方法,但具体解决方法可能因环境而异。如果以上步骤无法解决问题,请提供更多的错误信息和环境配置,以便我们能够更好地帮助你。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值