Gradio - Pytorch MNIST 数字识别器

发布于 2025-01-17 01:32:45 字数 1607 浏览 0 评论 0原文

我在 YouTube 上观看了以下视频 https://www.youtube.com/watch?v=jx9iyQZhSwI 其中表明可以在 Tensorflow 中使用 Gradio 和 MNIST 数据集的学习模型。我读过并写过可以在 Gradio 中使用 Pytorch,但我在实现时遇到了问题。有谁知道如何做到这一点? 我的 cnn Pytorch 代码

import torch.nn as nn
class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        self.conv1 = nn.Sequential(         
            nn.Conv2d(
                in_channels=1,              
                out_channels=16,            
                kernel_size=5,              
                stride=1,                   
                padding=2,                  
            ),                              
            nn.ReLU(),                      
            nn.MaxPool2d(kernel_size=2),    
        )
        self.conv2 = nn.Sequential(         
            nn.Conv2d(16, 32, 5, 1, 2),     
            nn.ReLU(),                      
            nn.MaxPool2d(2),                
        )
        # fully connected layer, output 10 classes
        self.out = nn.Linear(32 * 7 * 7, 10)
    def forward(self, x):
        x = self.conv1(x)
        x = self.conv2(x)
        # flatten the output of conv2 to (batch_size, 32 * 7 * 7)
        x = x.view(x.size(0), -1)       
        output = self.out(x)
        return output, x    # return x for visualization

通过观察我发现我需要更改 Gradio 使用的函数

def predict_image(img):
  img_3d=img.reshape(-1,28,28)
  im_resize=img_3d/255.0
  prediction=CNN(im_resize)
  pred=np.argmax(prediction)
  return pred

I watched the following video on YouTube https://www.youtube.com/watch?v=jx9iyQZhSwI where it was shown that it is possible to use Gradio and the learned model of MNIST dataset in Tensorflow. I have read and written that it is possible to use Pytorch in Gradio, but I have problems with its implementation. Does anyone have an idea how to do this?
My Pytorch code of cnn

import torch.nn as nn
class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        self.conv1 = nn.Sequential(         
            nn.Conv2d(
                in_channels=1,              
                out_channels=16,            
                kernel_size=5,              
                stride=1,                   
                padding=2,                  
            ),                              
            nn.ReLU(),                      
            nn.MaxPool2d(kernel_size=2),    
        )
        self.conv2 = nn.Sequential(         
            nn.Conv2d(16, 32, 5, 1, 2),     
            nn.ReLU(),                      
            nn.MaxPool2d(2),                
        )
        # fully connected layer, output 10 classes
        self.out = nn.Linear(32 * 7 * 7, 10)
    def forward(self, x):
        x = self.conv1(x)
        x = self.conv2(x)
        # flatten the output of conv2 to (batch_size, 32 * 7 * 7)
        x = x.view(x.size(0), -1)       
        output = self.out(x)
        return output, x    # return x for visualization

By watching I find that I need to change function that Gradio use

def predict_image(img):
  img_3d=img.reshape(-1,28,28)
  im_resize=img_3d/255.0
  prediction=CNN(im_resize)
  pred=np.argmax(prediction)
  return pred

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

巡山小妖精 2025-01-24 01:32:45

如果我弄错了您的问题,我很抱歉,但据我了解,您在尝试使用函数预测图像来预测数字时遇到了错误。

所以这里有两个可能的提示。也许您已经实现了它们,但我不知道,因为代码片段非常小。

首先。您是否在完成模型训练后使用 Do 将模型设置为评估模式

CNN.eval()

,并且希望在不训练模型的情况下评估输入。

其次,也许您需要向输入张量“im_resize”添加第四个维度。通常,您的模型需要输入的通道数、批量大小、高度和宽度的维度。
此外,我无法判断您的输入是否是数据类型 torch.tensor 。如果不先将数组转换为张量。

向您的输入张量添加批量维度。

im_resize = im_resize.unsqueeze(0)

您可以使用“我希望我正确理解您的问题并能够帮助您”

Im sorry if I got your question wrong, but from what I understand you are getting an error when trying to predict the digit using your function predict image.

So here are two possible hints. Maybe you have implemented them already, but I don't know because of the very small code snippet.

First of all. Have you set your model into evaluation mode using

CNN.eval()

Do after you finished training your model and want to evaluate inputs without training the model.

Second of all, maybe you need to add a fourth dimension to your input tensor "im_resize". Normally your model expects a dimension for the number of channels, the batch size, the height and the width of your input.
In addition I can not tell if your input is a of the datatype torch.tensor . If not transform your array into a tensor first.

You can add a batch dimension to your input tensor by using

im_resize = im_resize.unsqueeze(0)

I hope that I understand your question correctly and was able to help you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文