Python 如何使自定义pytorch数据集的结构与torchvision数据集类似?
我是pytorch的新手,我正在尝试重用一个时尚MNIST CNN()来对我的timeseries数据进行分类。我发现很难理解数据集的结构,因为按照我所能做到的,我得到的东西太简单了。我想这是因为我不太懂OOP。我制作的数据集在我的CNN训练中运行良好,但在试图用它们的代码分析结果时,我陷入了困境 因此,我从两个名为features[4050,1150,6]和targets[4050]的pytorch张量创建了一个数据集:Python 如何使自定义pytorch数据集的结构与torchvision数据集类似?,python,pytorch,torch,Python,Pytorch,Torch,我是pytorch的新手,我正在尝试重用一个时尚MNIST CNN()来对我的timeseries数据进行分类。我发现很难理解数据集的结构,因为按照我所能做到的,我得到的东西太简单了。我想这是因为我不太懂OOP。我制作的数据集在我的CNN训练中运行良好,但在试图用它们的代码分析结果时,我陷入了困境 因此,我从两个名为features[4050,1150,6]和targets[4050]的pytorch张量创建了一个数据集: train_dataset = TensorDataset(featur
train_dataset = TensorDataset(features,targets) # create your datset
train_dataloader = DataLoader(train_dataset, batch_size=50, shuffle=False) # create your dataloader
print(train_dataset.__dict__.keys()) # list the attributes
我通过检查属性得到这个打印输出
dict_键(['张量])
但在时尚MNIST教程中,他们访问数据的方式如下:
train_set = torchvision.datasets.FashionMNIST(
root='./data'
,train=True
,download=True
,transform=transforms.Compose([
transforms.ToTensor()
])
)
train_loader = torch.utils.data.DataLoader(train_set, batch_size=1000, shuffle=True)
print(train_set.__dict__.keys()) # list the attributes
通过检查属性可以得到打印输出
dict_键(['root','transform','target_transform','transforms',',
“列车”、“数据”、“目标”])
我的数据集可以很好地用于培训,但当我进入本教程后面的分析部分时,他们希望我访问数据集的部分,我得到一个错误:
# Analytics
prediction_loader = torch.utils.data.DataLoader(train_dataset, batch_size=50)
train_preds = get_all_preds(network, prediction_loader)
preds_correct = train_preds.argmax(dim=1).eq(train_dataset.targets).sum().item()
print('total correct:', preds_correct)
print('accuracy:', preds_correct / len(train_set))
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在里面
4预测加载程序=火炬.utils.data.DataLoader(序列数据集,批量大小=50)
5列预测=获取所有预测(网络、预测装载机)
---->6 preds_correct=train_preds.argmax(dim=1).eq(train_dataset.targets).sum().item()
7.
8打印('总正确:',预正确)
AttributeError:'TensorDataset'对象没有属性'targets'
谁能告诉我这里发生了什么事?这是我在制作数据集时需要改变的吗?还是我可以重写分析代码以访问数据集的正确部分?相当于
.targets
forTensorDataset
s将是train\u dataset.tensors[1]
实现非常简单:
class TensorDataset(数据集[元组[张量,…]):
r“”数据集包装张量。
将通过沿第一维度索引张量来检索每个样本。
论据:
*张量(张量):与第一维度大小相同的张量。
"""
张量:元组[张量,…]
def uuu init uuu(self,*张量:张量)->无:
断言所有(张量[0]。大小(0)=张量。大小(0)表示张量中的张量)
自张量=张量
定义uu获取项目uu(自身,索引):
返回元组(自张量中张量的张量[索引])
定义(自我):
返回self.tensors[0]。大小(0)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-73-daa87335a92a> in <module>
4 prediction_loader = torch.utils.data.DataLoader(train_dataset, batch_size=50)
5 train_preds = get_all_preds(network, prediction_loader)
----> 6 preds_correct = train_preds.argmax(dim=1).eq(train_dataset.targets).sum().item()
7
8 print('total correct:', preds_correct)
AttributeError: 'TensorDataset' object has no attribute 'targets'