由于需要查看dataloader中的图片,使用常规的显示方法会出现图片显示错误的情况,情况简述如下:
错误的显示代码:
plt.figure()
img_tensor = data_test[0,:,:,:].view(3,32,32)
img = img_tensor.detach().numpy() # 数据类型的转换
img_trans = img.transpose(1,2,0)
plt.imshow(img_trans)
其中data_test为:
其显示结果为:
很明显显示错误,简单分析应该是三维的tensor数据在读取时和我预想的不大一样。
经过测试,原因应该是数据在经过dataloader时其数据值进行了归一化与标准化,导致很多数据未负数,而负数在显示时直接显示为了黑色
因此对dataloader中提取的数据首先进行归一化,归一化至0-1的范围内,再进行显示
更改后的代码如下:
# 显示待测的图片是什么
plt.figure()
# img_tensor = data_test[0,:,:,:].view(3,32,32)
img_tensor = data_test[0, :, :, :]
img = img_tensor.detach().numpy() # 数据类型的转换
# img_squ = np.squeeze(img, 0)
# 每个通道对数据进行归一化
for i in range(3):
img[i,:,:] = feature_map_normalization(img[i,:,:])
img_trans = img.transpose(1,2,0)
plt.imshow(img_trans)
其中的feature_map_normalization如下:
def feature_map_normalization(data):
min_max_scaler = preprocessing.MinMaxScaler()
X_minMax = min_max_scaler.fit_transform(data)
return X_minMax
显示结果如下
可以基本看出是一只狗