从 Numpy 数组中获取变量
Get variable from a Numpy array
一个Pytorch的图像分类问题,我读入数据如下:
import scipy .io
emnist = scipy.io.loadmat(DATA_DIR + '/emnist-letters.mat')
data = emnist ['dataset']
X_train = data ['train'][0, 0]['images'][0, 0]
X_train = X_train.reshape((-1,28,28), order='F')
y_train = data ['train'][0, 0]['labels'][0, 0]
X_test = data ['test'][0, 0]['images'][0, 0]
X_test = X_test.reshape((-1,28,28), order = 'F')
y_test = data ['test'][0, 0]['labels'][0, 0]
我打算创建一个数据集,使用:
train_dataset = torch.utils.data.TensorDataset(torch.from_numpy(X_train), torch.from_numpy(y_train))
目前,当我运行一个y_train
的实例时,输出是一个数组:
y_train[0]
>>> array([23], dtype=uint8)
但是,我希望 train_dataset
只包含数组中第 0 个索引处的数字(在本例中为 23),而不是整个数组。
如何更改我的代码,使创建的 TensorDataset 仅包含 y_train
数组的第一个元素,而不是整个数组?
您可以使用 np.squeeze()
删除大小为 1 的数据的维度。如果您要删除特定维度,请将其传递给 squeeze
。
import numpy as np
arr = np.random.randn(1, 2, 1, 3, 1)
arr.squeeze().shape # (2, 3)
arr.squeeze(2).shape # (1, 2, 3, 1)
一个Pytorch的图像分类问题,我读入数据如下:
import scipy .io
emnist = scipy.io.loadmat(DATA_DIR + '/emnist-letters.mat')
data = emnist ['dataset']
X_train = data ['train'][0, 0]['images'][0, 0]
X_train = X_train.reshape((-1,28,28), order='F')
y_train = data ['train'][0, 0]['labels'][0, 0]
X_test = data ['test'][0, 0]['images'][0, 0]
X_test = X_test.reshape((-1,28,28), order = 'F')
y_test = data ['test'][0, 0]['labels'][0, 0]
我打算创建一个数据集,使用:
train_dataset = torch.utils.data.TensorDataset(torch.from_numpy(X_train), torch.from_numpy(y_train))
目前,当我运行一个y_train
的实例时,输出是一个数组:
y_train[0]
>>> array([23], dtype=uint8)
但是,我希望 train_dataset
只包含数组中第 0 个索引处的数字(在本例中为 23),而不是整个数组。
如何更改我的代码,使创建的 TensorDataset 仅包含 y_train
数组的第一个元素,而不是整个数组?
您可以使用 np.squeeze()
删除大小为 1 的数据的维度。如果您要删除特定维度,请将其传递给 squeeze
。
import numpy as np
arr = np.random.randn(1, 2, 1, 3, 1)
arr.squeeze().shape # (2, 3)
arr.squeeze(2).shape # (1, 2, 3, 1)