Pytorch dataloader labels. In the next part, you’ll see how to load custom labels for the PyTorch model. Size([20, 1, 28, 28]) # Batch label: tensor([3, 3, 7, 7, 2, 4, 7, 2, 1, 8, 3, 3, 9, 3, 2, 3, 5, 0 where ‘ants’, ‘bees’ etc. shape is a batch (the only batch of the data loader), shaped (4, 1274, 22). I have around 100 different folders that have the labels: 1,2,3…etc # number of subprocesses to use for data loading num_workers = 0 # how many samples per batch to load batch_sizes = 224 # TODO: Define transforms for the training data and testing data train_transforms = transforms. To see how many images are in our training set, we can check the length of the dataset using the Python len () function: > len (train_set) 60000. Firstly, I suspect you may want to know the directory name as a string. Sep 16, 2019 · 2. Indeed, DataLoader(dataset, batch_size=1, shuffle=True) will output four single-element batches: i. phi = torch. Models (Beta) Discover, publish, and reuse pre-trained models Mar 3, 2018 · First of all, the data should be in a different folder per label for the default PyTorch ImageFolder to load it correctly. x, y = get_image(item), get_label(item) return x, y. ) Oct 20, 2021 · Each has labels of different sizes. the following is my function: import torch. where(mask)[0]),shuffle=False, num_workers=2) Aug 1, 2023 · 今回は torch. head() Out[46]: file_path label 0 \\images\\29771. Running next() again will get the second item of the iterator, etc. RandomCrop(224), transforms. I've included what I tried in the updated question. Replace list with a numpy array. DataLoader ()". I'm using torch 1. targets to change the labels, but it doesn't work at all. But if this does not satisfy your needs, my suggestion will be to either do it with scikit-learn adapting PyTorch code, or to read scikit-learn code and adapt it to PyTorch. I have been using one hot encoding of labels to obtain dataloader. for batch_idx, (data, target) in enumerate (dataloader): ValueError: too many values to unpack (expected 2) here is my code: train_ds = Dataset(data=train_files, transform=train_transforms) dataloader_train = torch. I want to create a dataloader from this array but without labels ( For GAN). x1 = np. However, I have noticed that the labels are all 0 which is not Create a dictionary called labels where for each ID of the dataset, the associated label is given by labels[ID] For example, let's say that our training set contains id-1, id-2 and id-3 with respective labels 0, 1 and 2, with a validation set containing id-4 with label 1. to_numpy() and then using labels in the custom dataset resolved the issue. DataLoader. from_numpy(img). Everything goes well before the data is passed to the Dataloader. next()? I checked the DataLoader class and the DataLoaderIter class, but think I need a bit more knowledge of iters in general. Usually we split our data into training and testing sets, and we may have different batch sizes for each. trainloader = torch. Both train and validation set have multiple labels of varying number. Colab は こちら. Jun 8, 2020 · I have a csv file for train and test datasets that contains the file location and the label. to(device), labels. Feb 13, 2017 · I am using ResNet-18 for classification purpose. train_loader = utils. 1 Like. Compose([transforms. Sep 23, 2022 · How to create batches using PyTorch DataLoader such that each example in a given batch has the same value for an attribute? 0 Pytorch DataLoader is not dividing the dataset into batches Mar 24, 2022 · PyTorch Forums ImageFolder dataLoader for ImageNet with selected classes and pretrained PyTorch model for images, labels in data_loader : images = images. I am having 2 folders one with images and another with the pixel labels of the corresponding images. Is there a way to the DataLoader machinery with unlabeled data? 1 Like. the labels on the dataset I have the MINST dataset as jpg's in the following folder structure. class_to_idx = self. Feb 25, 2017 · The problem comes from the fact that your Y_train is a 1D tensor and thus when the batch is created, its stacking plain numbers (creating a double tensor to have best precision) Reshaping your Y_train to a 2D tensor solved the problem: Y_train = torch. TensorDataset to create a dataset that iterates over your examples. pow(cosine, 2)) phi = cosine * self. the data and targets can be extracted using trainset. to_csv (' dataset_train. DataLoader(trainset, batch_size=4, sampler=SubsetRandomSampler(np. You can see from the output of above that X_batch and y_batch are PyTorch tensors. · Issue #20433 · pytorch/pytorch (github. We will do the following steps in order: Load and normalize the CIFAR 10 training and test datasets using torchvision. E. But here is a little trick you can put your numpy arrays directly. DataLoader から画像ではなく画像のパスとラベルを取り出す方法について書いてみた。. data as data_utils # get the numpy data Dataset stores the samples and their corresponding labels, and DataLoader wraps an iterable around the Dataset to enable easy access to the samples. utils. py: You are not properly using python's enumerate (). But the DataLoader is not working for both (frames, labels) and just can iterate for one of them. Forums. DataLoader. data shape = train_iterator. dataset attribute: Counter(train_dataset_subset. datasets. x = get_image(item) return x. Not in the class is the DataLoader string: test_dataloader = DataLoader(datat. The labels are provided in a . Familiarize yourself with PyTorch concepts and modules. A rather simple solution would involve grouping the dataset by truth value, and creating a unique dataloader per group: from torch. From what I understand, the dataloaders available in Pytorch divide each video in a certain number of subclips (which I cannot Jul 3, 2021 · Take a look at this implementation; the FashionMNIST images are stored in a directory img_dir, and their labels are stored separately in a CSV file annotations_file. 学習の再、 iteration ごとにどの画像やラベルのものが使われているのか、調査するのに便利。. Dataloader’s memory usage keeps increasing during one single epoch. Dataset: The first parameter in the DataLoader class is the dataset. dataset. However, in other datasets, which lazily load each image file, you can just return the path with the data and target tensors. Oct 10, 2021 · This means the dataloader will only output a single batch containing 4 elements. Calculates the loss for that set of predictions vs. data import DataLoader , TensorDataset dataset = TensorDataset(X , y) trainloader = DataLoader(dataset , batch_size = 16, shuffle=True) Nov 22, 2017 · One small remark: apparently sampler is not compatible with shuffle, so in order to achieve the same result one can do: torch. ). So Jun 11, 2020 · I'm trying to make a simple image classifier using PyTorch. train_data = datasets. So, I tried several things like for example a dumb list of tuples but it did not work. The target data had selected successfully before passing to the Aug 5, 2022 · Yes, you could access the internal . 3. Simple doing labels. train_ds, batch_size=2, shuffle=True, num_workers=4, pin_memory=True. mm) output = (labels Nov 25, 2018 · How does the last line know how to automatically assign images, label in images, labels = dataiter. You can convert your data/label ndarrays to torch. to(device) This way of loading data is very The DataLoader knows nothing about the data, but organizes the input tensors served by the Dataset into batches with the parameters you specify. The default DataLoader (load data along with labels) fits in two lines of code: Oct 23, 2020 · in train. TensorDataset() and torch. com. Using just class_id , rather that [class_id] woud lead to us having a final size of [batch_size], as each class_id is just Jul 7, 2020 · Hello everyone, So, I am working on a small project and I am kind of stuck for like 2 hours now on a thing that seems simple so I would be very thankful if anyone can help. パスやラベル以外にも、様々な属性を出力できるように Oct 29, 2019 · The labels that I was using to make a custom dataset and then the dataset was being used in dataloader. May 31, 2020 · In training loop, I load a batch of data into CPU and then transfer it to GPU: import torch. Find resources and get questions answered. When I try that it gives me the following: Counter ( {0: 5000, 1:5000, 2 : 5000, … , 9 : 5000}) However I need the train_dataset_subset to return something like this: Counter ( { 0: 300, 1 Jan 24, 2022 · label=f. That's odd. You can use these to write a dataloader like this: Jul 1, 2022 · Please help ! ptrblck July 1, 2022, 7:00pm 2. classes, self. root=data_path, transform=torchvision. You could store the labels with the predictions while iterating the val_dl. DataLoader(train_dataset, 32, shuffle=True) I am trying to display a multiple images using the code below: May 31, 2021 · I'm working with two tensors, inputs and labels, and I want to have them together to train a model. Similarly generic transforms which operate on PIL. May 5, 2021 · I've currently tried to use "ImageFolder" from torchvisions datasets to load the images as follows: TRAIN_PATH = '/path/to/dataset/DATASET'. Pytorch's DataLoader is designed to take a Dataset object as input, but all it requires is an object with a __getitem__ and __len__ attribute, so any generic container will suffice. My data has multi labels in range of 1 to 4 labels per image. Dataset and implement functions specific to the particular data. The labels are coming from torchvision. targets), divide data to a number of partitions using np. a list of tuples with your features (x values) as the first element, and targets (y values) as the second element can be passed directly to DataLoader Jan 15, 2020 · Dataloader from numpy array without labels? I have 100 images read as numpy array of shape (100,100,100,3). So, when you feed your forward () function with this data, you need to use the length to get the original data back, to not use those meaningless zeros in your computation. Then I give these two to "torch. PyTorch domain libraries provide a number of pre-loaded dataset s (such as FashionMNIST) that subclass torch. 07): # This functions generates pseudo-labels of a dataset using given model. from_numpy(Y_train). read(label_path) return img,label. Nov 2, 2022 · Your get_relevant_indicies function returns a list of labels for each sample in the dataset. With ImageFolder, there is no direct way to Jun 24, 2020 · Basically iter() calls the __iter__() method on the iris_loader which returns an iterator. This is how I load the data into a dataset and dataLoader: batch_size = 64 validation_split = 0. ImageFolder and reflect the directory structure of your dataset (as seen on your HDD). ptrblck Jun 26, 2019 · As others mentioned you have to implement a custom dataset as it is important to make __getitem__ return the sample and its label. (x, y) are currently assigned the 2 keys of your batch dictionary i. val_df, batch_size=10, shuffle=True) In my Trainer Class i have a for loop which should iterate through the Dataloader: with torch. I need to extract some features from HMDB51/UCF101 dataset for a video classification task using a pretrained 3D CNN. Hi all I have used the following code to select a piece of data. Luca December 12, 2019, 5:07pm 1. pn Mar 21, 2020 · 1. In the example above, we’ve asked a DataLoader to give us batches of 4 images from trainset, randomizing their order (shuffle=True), and we told it to spin up two workers to load data from disk. no_grad(): for data in dataloader: inputs, labels, idx = data inputs = inputs. The folder name is the label and the images are 28x28 png's in greyscale, no transformations required. test_loader = DataLoader(test_set, batch_size=batch_size, shuffle=False) It returns labels like this: The labels are all 1 which is impossible because my data includes data from different classes (thus Jul 25, 2022 · I have successfully loaded my data into DataLoader with the code below: train_loader = torch. By checking the code inside make_dataset(), you will get a better idea of what “list of files” will be collected. In turn, this means you only append a single element per epoch, and one[3]. Therefore, with a single dataloader you can shuffle across studies (if desired) and use the desired batch size during training. I want to sample from both at the same time for every iteration of training. Oct 29, 2021 · There is this option in PyTorch about stratified sampling. array (trainset. Nov 4, 2019 · Just pass in your image folder path when you instantiate the DataSet. Please let me know if that approach sounds reaosnable. transforms. CIFAR10 ( root=". Here is my code snippet for loading data: transform = transforms. Once you have a dataset, you can wrap a DataLoader around it to be used for training. Test the network on the test data. cos_m - sine * self. I want to create a dataloader using these two. For example I want to select the data from ‘cat’, ‘dog’ and ‘deer’ classes with target labels 3, 4 and 5. Community. /data", train=True, download=True, transform=transform ). Jul 16, 2021 · I'm trying to create a custom pytorch dataset to plug into DataLoader that is composed of single-channel images (20000 x 1 x 28 x 28), single-channel masks (20000 x 1 x 28 x 28), and three labels (20000 X 3). next() then calls the __next__() method on that iterator to get the first iteration. items ()} loaders = {target Jun 18, 2019 · Hi Everyone, I am very new to Pytorch and deep learning in general. Jun 10, 2023 · DataFrame ({' path ': file_paths, ' label ': labels}) # Display the DataFrame print (df. DataLoaderの実装を見てみ Apr 6, 2021 · I have tried using dataset. The loader is an instance of DataLoader class which can work like an iterable. ndarray to tensor. shape datatype = train_iterator. cuda Oct 15, 2019 · I have a csv that contains a column of image file names, target labels and location of each file. A place to discuss PyTorch code, issues, install, research. Jun 13, 2022 · # Loading the First Batch and Printing Information for idx, batch in enumerate(data_loader): print('Batch index: ', idx) print('Batch size: ', batch[0]. sqrt(1. Look at this in the docs. _find_classes(image_path) def _find_classes(self, dir): # Custom labels. csv file where 1st column is filename of images in training set and second column has varying number of labels. device) Dec 16, 2022 · Changing labels in Dataloader. The head of this data frame is: df. the strings "image" and "labels". I have the dataloaders as such train_dl= torch. Compose(. PyTorch domain libraries provide a number of pre-loaded datasets (such as FashionMNIST) that subclass torch. Apr 8, 2023 · loader = DataLoader(list(zip(X,y)), shuffle=True, batch_size=16) for X_batch, y_batch in loader: print(X_batch, y_batch) break. That’s what dataset[i][1] returns for the ImageFolder dataset - the target label for the image (the image itself would be in dataset[i][0]. Define a loss function. th, phi, cosine - self. Whats new in PyTorch tutorials. To do so, l have tried the following import numpy as np import torch. – akshayk07. This logic often happens 'behind the scenes', for example when running a for loop. RandomHorizontalFlip(), Learn about PyTorch’s features and capabilities. Learn the Basics. Dataset) which provides training examples via it's __get_item__ method to the torch. I could do something like: train_dl = DataLoader(trainset_1+trainset_2, shuffle = True, batch_size=128, num_workers=4) But the issue is the mismatch in dimensions of labels and the data loader can’t stack tensors of different We would like to show you a description here but the site won’t allow us. You are then using these labels (so either 0, 1 or 2) as data indices, which is 100% not what you meant to do. tensor and use torch. e. I took a subset of it and want to change the labels of the whole subset to a single label. ImageFolder(. Find events, webinars, and podcasts. Resize([256, 256]), transforms. One way to do this is using TensorDataset. Apr 1, 2019 · 1. Zeros the optimizer’s gradients. dataset=Dataset(labels_paths,batch_size=32) I have also implemented my own representation of one hot encoding that converts the class label to one hot and returns them,which can be later on used during training. ToTensor() Jan 28, 2021 · (Torch requires labels to be in the shape [batch_size, label_dimension]. When I use PyTorch DataLoader to load my test data, I set the shuffle to False like this. I also recommend PyTorch documentation about Creating a Custom Dataset for your files and this YouTube video. data and np. For the second part, I am using . train_loader): x, y = batch ["image"], batch ["labels"] # Aug 1, 2019 · self. DataLoader (dataset, batch_size=32, sampler=train_sampler) val_dl = torch. In the pytorch tutorials I found, the DataLoader is used as an iterator to generate the training loop like so: Oct 16, 2020 · SarahTeoh (sarah) October 16, 2020, 7:12am 1. from torch. I would like to know how to use the dataloader to make a train_loader and validation_loader if the only thing I know is the path to these folders. In addition to this, PyTorch also has an in-built DataLoader class which wraps an iterable around the dataset enabling us to easily access and iterate over the data samples in our dataset. Batching the data: batch_size refers to the number of training samples used in one iteration. I make a function and return (frames, labels). How do I code a dataloader to read the csv, and pull the images, randomly split off a test set and finally having a train and test set to pull in batches? CSV columns are as such: location: directory of where the image sits Jun 15, 2018 · It instantiates a Dataloader like this: -> run from main. Jun 20, 2019 · I have 3 separate image folders for train, test and validation set. DataLoader (dataset, batch_size=32, sampler=valid_sampler) I finished Nov 7, 2019 · 例えば上記の例では、MNISTのデータがNormalizeされた状態で256個(ミニバッチ)ずつimgとlabelにいい感じに入ってきてくれます。 ではどうやってそれが実現されているのか、中身を見に行きましょう。 torch. Events. All images in folder sorted by alphabet. sine = torch. Dec 13, 2020 · DataLoader(toy_dataset, collate_fn=collate_fn, batch_size=5) With this collate_fn function, you always gonna have a tensor where all your examples have the same size. Dec 12, 2019 · Video dataloader - recover video labels - vision - PyTorch Forums. utils as utils. This labels array was actually coming from a pandas dataframe and it still contained the original indices from pandas. [transforms. dtype Jun 28, 2020 · DataFrame contains a image name in folder and label to image. Jul 13, 2021 · vision. Jan 7, 2019 · Otherwise, I would simply collect all 40,561 images, assign the same label to all images from the same study (such that list of outputs in A is compared with a list of 12 labels). dcprime (Darren Conley) July 15, 2020, 6:28pm 8. Otherwise the DataLoader can not figure out the labels by itself. array([1,2,3]) d1 = DataLoader( x1, batch_size=3) I have a python script written using PyTorch that loads the dataset using datasets. Join the PyTorch developer community to contribute, learn, and get your questions answered. The output gives me the batch numbers, labels and tensors of the images in the batches which is correct. targets) 1 Like. ToTensor()) train_loader = DataLoader(train_data, batch_size=16, shuffle=True) However as shown below: for img, label in train_loader Nov 29, 2021 · Pytorch の Dataset、Dataloader の仕組みを理解しながらPytorchをやってみた. Dataset stores the samples and their corresponding labels, and DataLoader wraps an iterable around the Dataset to enable easy access to the samples. com) This discussion is the one probably you that can help you fixing the issue. Jun 20, 2017 · I am not sure what you meant, but loader is a function to load files/images. Suppose we want to see the labels for each image. Define a Convolutional Neural Network. Image like RandomHorizontalFlip , Scale , are also available. Pytorch の Dataset や Dataloader がよくわからなかったので調べながら画像分類をやってみました。. Train the network on the training data. view(-1, 1) @apaszke changing this line with: The DataLoader knows nothing about the data, but organizes the input tensors served by the Dataset into batches with the parameters you specify. (I know I can just use the dataset class, but this is purely to see how to load simple images into pytorch without csv's or complex features). I have used dataloader to load the data. Feb 10, 2019 · I have a data set of images, labels . . # It returns an instance of DatasetFolder containing images whose prediction confidences Oct 4, 2021 · A PyTorch Dataset provides functionalities to load and store our data samples with the corresponding labels. data = datasets. 2 data_dir = PROJECT_PATH+"/ Apr 9, 2020 · Finally, I check a == c and b == d and they both give True, which was expected because the shuffle parameter of the DataLoader is False. Tutorials. This is where we load the data from. def get_pseudo_labels(dataset, model, threshold=0. github. a shape (1 Jun 24, 2021 · The CIFAR10 dataset doesn’t download all images separately, but the binary data as seen here, so you won’t be able to return paths to each image. DataLoader(trainset, batch_size=128, shuffle=True, num_workers=0) Apr 2, 2024 · data_loader_iterator = iter (data_loader) # Create an iterator while True: try: images, labels = next (data_loader_iterator) # Get the next batch # Process the batch # except StopIteration: break # Reached the end of the DataLoader. kaggle API を使ってデータ Dec 1, 2018 · test_loader = DataLoader(image_datasets['val'], batch_size=batch_size, shuffle=True) it is giving you a batch of size batch_size, and you can pick out a single random example by directly indexing the batch: for test_images, test_labels in test_loader: sample_image = test_images[0] # Reshape them according to your needs. Apr 5, 2022 · dataloader = DataLoader (dataset, batch_size=10, shuffle=True) for batch_number, (images, labels) in enumerate (dataloader): print (batch_number, labels) print (images) break. Jan 19, 2020 · PyTorch Forums Data loader without labels? f3ba January 19, 2020, 6:03pm 1. float() cosine = logits. In your case, since all the training data is in the same folder, PyTorch is loading it as one class and hence learning seems to be working. Performs an inference - that is, gets predictions from the model for an input batch. ImageFolder(image_path, transform) self. ImageFolder(root=TRAIN_PATH, transform=transforms. RandomRotation Feb 19, 2019 · As suggested by the Pytorch documentation, I implemented my own dataset class (inheriting from torch. array_split. data. logits = logits. This is poorly documented but the dataloader has a classes attribute which stores those. ImageFolder and assigns a label to each image and then trains. make_dataset() is where you define the list of files you are going to randomly select and pass to loader. Bite-size, ready-to-deploy PyTorch code examples. g. In the next sections, we’ll break down what’s happening in each of these functions: def __init__(self, annotations_file, img_dir, transform=None, It enumerates data from the DataLoader, and on each pass of the loop does the following: Gets a batch of training data from the DataLoader. Please help me to create a dataloader for pytorch. The new data loader contains rotated images of the MNIST digits and their corresponding rotation angle labels (0 for 0°, 1 for 90°, etc. Developer Resources. Jul 1, 2022 · PyTorchのDataLoaderで各バッチの形状を確認する方法についてまとめました。各バッチ内のデータの形状などを確認したいときやデバッグなどに iter と next を使う方法は便利なのではないかと思います。 本記事を書く際、以下のサイトを参考にしました。 Yes. Jan 13, 2022 · 1. So, I have a list of tensors that I called new_images and a list of labels. Intro to PyTorch - YouTube Series Training an image classifier. The class has properties X and y which store the features (images) and the targets Oct 5, 2018 · Hello, I have a dataset composed of labels,features,adjacency matrices, laplacian graphs in numpy format. We would like to show you a description here but the site won’t allow us. Nov 23, 2018 · Hello Pytorch friends, I want to classify images with the help of Pytorch. are class labels. 0 - torch. My code: def load_data(data_path, targets): train_data = torchvision. head ()) # Save the DataFrame to a CSV file df. DataLoader(. class_to_idx. ex: my_dataset = CustomDataSet (“path/to/root/”, transform=your_transforms) If you aren’t using transforms, remove the 3 references to transform in your CustomDataSet code. Feb 19, 2021 · You can inspect the data with following statements: data = train_iterator. Run PyTorch locally or get started quickly with one of the supported cloud platforms. Jun 8, 2017 · If you have an image with pixels from 0-255 you may use this: timg = torch. Personally, I prefer the last option. flummery (Zheng Yao) August 5, 2022, 1:51am 3. DataLoaderを見てみる. Apr 8, 2024 · Thanks. There is another solution to my problem? Summary: 2 Tensors It takes a PyTorch DataLoader object as input and uses the data and targets from this object to create a new data loader. 2. Models (Beta) Discover, publish, and reuse pre-trained models We would like to show you a description here but the site won’t allow us. rrrongon (Rubayet Rahman Rongon) April 29, 2024, 4:46pm 6. Jun 8, 2019 · Exploring the data. csv ', index = False) # Calculate the mean and std values of train images # Iterate through each class directory # Initialize empty lists for storing the image tensors image_tensors We would like to show you a description here but the site won’t allow us. Just leaving tensorflow-keras side, I am admittedly a newbie to pytorch. The CPU loads data into the GPU at every mini-batch. But how get the label to class name mapping? Does it load in alphabetical order? Aug 23, 2021 · In the preprocessing, for CIFAR10 dataset: trainset = torchvision. data_utils. Thank you for the reply. There are tricks in PyTorch (and other frameworks) which enable them to load the data in parallel processes to reduce the latency to some extent. where(cosine > self. In that case, the Python variables partition and labels look like. Learn how our community solves real, everyday machine learning problems with PyTorch. When I call class_to_idx, I have 964 different classes as expected, but when I create a DataLoader, it is giving me the old count of labels. float() Or torchvision to_tensor method, that converts a PIL Image or numpy. Jan 21, 2020 · Keep all images in the root directory and load the labels from CSV. size()) print('Batch label: ', batch[1]) break # Returns: # Batch index: 0 # Batch size: torch. It showed an Dec 12, 2018 · Yes, though not (easily) programmatically. DataLoader(train_dataset, batch_size=128, shuffle=True, num_workers=4, pin_memory=True) for inputs, labels in train_loader: inputs, labels = inputs. I would like to build a torch. PyTorch Recipes. data import Subset, DataLoader subsets = {target: Subset (train_set, [i for i, (x, y) in enumerate (train_set) if y == target]) for _, target in train_set. to(self. データセットは kaggle の Cat vs Dog を使っています。. This approach offers more control over the iteration process but is less common than using a for loop. DataLoader() that can take labels,features,adjacency matrices, laplacian graphs. I have a 2D tensor which has my frames information and a 1D tensor with the output or label information related to each frame. This 60000 number makes sense based on what we learned in the post on the Fashion-MNIST dataset. sin_m. It says, Except. eg: MNIST 0,1,2,3,4,5,6,7,8,9 ; lets say i want labels of 5,6,7,8,9 be 5. Yes, you're right. This should solve your problem: for i, batch in enumerate (self. Jul 18, 2020 · Hy, I guess what you’re asking for is how to load your own dataset into dataloader. 7, but I can't use the function TensorDataset() and then apply DataLoader(), due to some incompatibilities with other packages when I use TensorDataset(). hw zm ic cg xr kq qw oe zw dd