我需要用我训练的卷积神经网络的数据测试结果来写入一个文件。这些数据包括说话人的语音数据收集。文件的格式应该是“文件名,预测结果”,但我很难提取文件名。我是这样加载数据的:
import torchvision
from torchvision import transforms
from torch.utils.data import DataLoader
TEST_DATA_PATH = ...
trans = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))
])
test_dataset = torchvision.datasets.MNIST(
root=TEST_DATA_PATH,
train=False,
transform=trans,
download=True
)
test_loader = DataLoader(dataset=test_dataset, batch_size=1, shuffle=False)
我正在尝试以下方式向文件写入:
f = open("test_y", "w")
with torch.no_grad():
for i, (images, labels) in enumerate(test_loader, 0):
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
file = os.listdir(TEST_DATA_PATH + "/all")[i]
format = file + ", " + str(predicted.item()) + '\n'
f.write(format)
f.close()
os.listdir(TESTH_DATA_PATH + "/all")[i]
的问题在于它与 test_loader
加载的文件顺序不同步。我该怎么办?
batch_size=1, shuffle=False
。否则,您必须使用自定义数据集进行包装,就像我在答案中建议的那样,在__getitem__(...)
中返回sample_fname
。 - BerrielDatasetFolder
,而是一个Subset
。在这种情况下,你需要访问额外的.dataset
属性,并根据你的Subset
索引使用正确的索引。 - Berriel