Python/Pytorch如何使用图像数组?

2024-09-30 01:32:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把图像数据放在神经网络中,但是我在使用图像数据类型时遇到了问题。 我用Pytorch读取我的数据

import torch
import torchvision
import numpy as np
from settings import Settings

class Data_Read:
    @staticmethod
    def getTrain():
        train_dataset = torchvision.datasets.ImageFolder(
            root=Settings.pathTrainImagesCopy,
            transform=torchvision.transforms.ToTensor()
        )
        train_loader = torch.utils.data.DataLoader(
            train_dataset,
            batch_size=64,
            num_workers=0,
            shuffle=True
        )
        return train_loader

    @staticmethod
    def getTest():
        test_dataset = torchvision.datasets.ImageFolder(
            root=Settings.pathTestImagesCopy,
            transform=torchvision.transforms.ToTensor()
        )
        test_loader = torch.utils.data.DataLoader(
            test_dataset,
            batch_size=64,
            num_workers=0,
            shuffle=True
        )
        return test_loader

下面的代码创建一个一维图像列

class Imagez:
    @staticmethod
    def Get(arr):
        imageData = []
        for item in arr:
            filePath = item
            img = Image.open(filePath).convert('LA')
            imageData.append(img)

        return imageData

这些方法从主类调用如下

trainData = Data_Read.getTrain()
testData = Data_Read.getTest()

arrTrain = np.array(trainData.dataset.imgs)[:,0]
labelTrain = trainData.dataset.targets

arrTest = np.array(testData.dataset.imgs)[:,0]
labelTest = testData.dataset.targets

X_Train = Imagez.Get(arrTest)

我发现每当我试图在X\u Train中使用Images数据类型I时,就会遇到错误消息的麻烦。 例如:

mlp = MLPClassifier(hidden_layer_sizes=(10,10,10), max_iter=1000 )
mlp.fit(X_Train, labelTrain)

会给我这个错误信息

Traceback (most recent call last): File "c:\Users\hijik.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\ptvsd_launcher.py", line 43, in main(ptvsdArgs) File "c:\Users\hijik.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\lib\python\old_ptvsd\ptvsd__main__.py", line 432, in main run() File "c:\Users\hijik.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\lib\python\old_ptvsd\ptvsd__main__.py", line 316, in run_file runpy.run_path(target, run_name='main') File "C:\Users\hijik\AppData\Local\Continuum\anaconda3\lib\runpy.py", line 263, in run_path pkg_name=pkg_name, script_name=fname) File "C:\Users\hijik\AppData\Local\Continuum\anaconda3\lib\runpy.py", line 96, in _run_module_code mod_name, mod_spec, pkg_name, script_name) File "C:\Users\hijik\AppData\Local\Continuum\anaconda3\lib\runpy.py", line 85, in _run_code exec(code, run_globals) File "d:\702\702-Coursework-Task-5\src\Main.py", line 74, in mlp.fit(X_Train, Y_TrainLabels) File "C:\Users\hijik\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\neural_network\multilayer_perceptron.py", line 981, in fit
return self._fit(X, y, incremental=(self.warm_start and File "C:\Users\hijik\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\neural_network\multilayer_perceptron.py", line 323, in _fit X, y = self._validate_input(X, y, incremental) File "C:\Users\hijik\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\neural_network\multilayer_perceptron.py", line 919, in _validate_input multi_output=True) File "C:\Users\hijik\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\utils\validation.py", line 719, in check_X_y estimator=estimator) File "C:\Users\hijik\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\utils\validation.py", line 496, in check_array array = np.asarray(array, dtype=dtype, order=order) File "C:\Users\hijik\AppData\Local\Continuum\anaconda3\lib\site-packages\numpy\core\numeric.py", line 538, in asarray return array(a, dtype, copy=False, order=order) TypeError: int() argument must be a string, a bytes-like object or a number, not 'Image'

我想我需要把我的图像转换成另一种数据类型。你有什么建议?你知道吗

编辑-这是最小可再现误差

X_Train = []
filePath = '..\\images\\Train\\anger\\S010_004_00000014.png'
img = Image.open(filePath).convert('LA')
X_Train.append(img)
Y_TrainLabels = ["0"]
mlp = MLPClassifier(hidden_layer_sizes=(10,10,10), max_iter=1000 )
mlp.fit(X_Train, Y_TrainLabels)

Tags: runnameinpyliblocallinetrain
1条回答
网友
1楼 · 发布于 2024-09-30 01:32:16

首先,您的Imagez类返回PIL图像的列表,这些图像不能用于训练,因为您需要数字表示。你知道吗

简单的解决方法是:

import torchvision


class Imagez:
    @staticmethod
    def Get(arr):
        imageData = []
        for item in arr:
            filePath = item
            # This transforms below
            img = torchvision.transforms.functional.to_tensor(
                Image.open(filePath).convert("LA")
            )
            imageData.append(img)

        return imageData

查看^{}文档以及您是否真的需要它。你知道吗

第二,如果你想要sklearn,而它是MLPClassifier,你必须把这些数组转换成np.array。你知道吗

对于每一个,您可以调用pytorch张量上的.numpy(),将其转换,然后将其堆叠成一个数组。你知道吗

此外,您的输入和输出似乎是图像,您要么将这些图像flatten转换为完全连接层的单个向量,要么使用卷积神经网络和PyTorch,例如下面的网络:

import torch

model = torch.nn.Sequential(
    torch.nn.Conv2d(3, 64, kernel_size=3),
    torch.nn.Conv2d(64, 128, kernel_size=3),
    torch.nn.Conv2d(128, 128, kernel_size=3),
    torch.nn.Conv2d(128, 128, kernel_size=3),
    torch.nn.Conv2d(128, 1, kernel_size=3),
)

你可以在PyTorch网站上找到一些基本的教程,60 Minute Blitz对你来说似乎是一个很好的起点,因为这里有很多问题需要解决。你知道吗

相关问题 更多 >

    热门问题