nn.init.xavier_normal_(conv_layer.weight.data) # calculation img_tensor.unsqueeze_(dim=2) # B*C*H*W to B*C*D*H*W 一般三维卷积对5维张量(多了时间维度)计算 img_conv = conv_layer(img_tensor) # ================ transposed if flag == 't': conv_layer = nn.ConvTranspose2d(3, 1, 3, stride=2) # input:(i, o, size) nn.init.xavier_normal_(conv_layer.weight.data) # calculation img_conv = conv_layer(img_tensor) # ================================= visualization ================================== print("卷积前尺寸:{}\n卷积后尺寸:{}".format(img_tensor.shape, img_conv.shape)) if flag == '3d': img_raw = transform_invert(img_tensor.squeeze(), img_transform) img_conv = transform_invert(img_conv.squeeze(), img_transform) else: img_raw = transform_invert(img_tensor.squeeze(), img_transform) img_conv = transform_invert(img_conv[0, 0:1, ...], img_transform) # 0:1可以保留这个维度 plt.figure(figsize=(16, 16)) plt.subplot(121).imshow(img_raw) plt.subplot(122).imshow(img_conv, cmap='gray') plt.show()
# ============================ inference ============================ BASE_DIR = os.path.dirname(os.path.abspath(__file__)) test_dir = os.path.join(BASE_DIR, "test_data") test_data = RMBDataset(data_dir=test_dir, transform=valid_transform) valid_loader = DataLoader(dataset=test_data, batch_size=1) for i, data in enumerate(valid_loader): # forward inputs, labels = data outputs = net(inputs) _, predicted = torch.max(outputs.data, 1) rmb = 1 if predicted.numpy()[0] == 0 else 100 img_tensor = inputs[0, ...] # C H W img = transform_invert(img_tensor, train_transform) plt.imshow(img) plt.title("LeNet got {} Yuan".format(rmb)) plt.show() plt.pause(0.5) plt.close()
plt.plot(valid_x, valid_y, label='Valid') plt.legend(loc='upper right') plt.ylabel('loss value') plt.xlabel('Iteration') plt.show() # ============================ inference ============================ BASE_DIR = os.path.dirname(os.path.abspath(__file__)) test_dir = os.path.join(BASE_DIR, "test_data") test_data = RMBDataset(data_dir=test_dir, transform=valid_transform) valid_loader = DataLoader(dataset=test_data, batch_size=1) for i, data in enumerate(valid_loader): # forward inputs, labels = data outputs = net(inputs) _, predicted = torch.max(outputs.data, 1) rmb = 1 if predicted.numpy()[0] == 0 else 100 img_tensor = inputs[0, ...] # C H W img = transform_invert(img_tensor, valid_transform) plt.imshow(img) plt.title("LeNet got {} Yuan".format(rmb)) plt.show() plt.pause(0.5) plt.close()
img_tensor.unsqueeze_(dim=0) # C*H*W to B*C*H*W # ================ 3d kernel (1, 3, 3) # flag = 1 flag = 0 if flag: conv_layer = nn.Conv3d(3, 1, (1, 3, 3), padding=(1, 0, 0), bias=False) nn.init.xavier_normal_(conv_layer.weight.data) # calculation img_tensor.unsqueeze_(dim=2) # B*C*H*W to B*C*D*H*W img_conv = conv_layer(img_tensor) # ================================= visualization ================================== print("卷积前尺寸:{}\n卷积后尺寸:{}".format(img_tensor.shape, img_conv.shape)) img_conv = transform_invert(img_conv.squeeze(), img_transform) img_raw = transform_invert(img_tensor.squeeze(), img_transform) plt.subplot(122).imshow(img_conv, cmap='gray') plt.subplot(121).imshow(img_raw) plt.show() # ================ 3d kernel (3, 3, 3) flag = 1 # flag = 0 if flag: conv_layer = nn.Conv3d(3, 1, (3, 3, 3), padding=(1, 0, 0), bias=False) nn.init.xavier_normal_(conv_layer.weight.data) # calculation img_tensor.unsqueeze_(dim=2) # B*C*H*W to B*C*D*H*W img_conv = conv_layer(img_tensor)
img_reconstruct = torch.randn_like(img_pool, dtype=torch.float) maxunpool_layer = nn.MaxUnpool2d((2, 2), stride=(2, 2)) img_unpool = maxunpool_layer(img_reconstruct, indices) print("raw_img:\n{}\nimg_pool:\n{}".format(img_tensor, img_pool)) print("img_reconstruct:\n{}\nimg_unpool:\n{}".format( img_reconstruct, img_unpool)) # ================ linear # flag = 1 flag = 0 if flag: inputs = torch.tensor([[1., 2, 3]]) linear_layer = nn.Linear(3, 4) linear_layer.weight.data = torch.tensor([[1., 1., 1.], [2., 2., 2.], [3., 3., 3.], [4., 4., 4.]]) linear_layer.bias.data.fill_(0.5) output = linear_layer(inputs) print(inputs, inputs.shape) print(linear_layer.weight.data, linear_layer.weight.data.shape) print(output, output.shape) # ================================= visualization ================================== print("池化前尺寸:{}\n池化后尺寸:{}".format(img_tensor.shape, img_pool.shape)) img_pool = transform_invert(img_pool[0, 0:3, ...], img_transform) img_raw = transform_invert(img_tensor.squeeze(), img_transform) plt.subplot(122).imshow(img_pool) plt.subplot(121).imshow(img_raw) plt.show()
# flag = 1 flag = 0 if flag: conv_layer = nn.Conv2d( 3, 1, 3) # input:(i, o, size) weights:(o, i , h, w) 输入通道3,输出通道1,卷积核为3*3 nn.init.xavier_normal_( conv_layer.weight.data) # 采用xavier的方法对上一行创建的卷积层进行初始化 # calculation 输入图片张量进入卷积层 img_conv = conv_layer(img_tensor) # ================ transposed 创建2维正常卷积================================================= flag = 1 # flag = 0 if flag: conv_layer = nn.ConvTranspose2d(3, 1, 3, stride=2) # input:(i, o, size) nn.init.xavier_normal_(conv_layer.weight.data) # calculation img_conv = conv_layer(img_tensor) # ================================= visualization ================================== print("卷积前尺寸:{}\n卷积后尺寸:{}".format(img_tensor.shape, img_conv.shape)) img_conv = transform_invert(img_conv[0, 0:1, ...], img_transform) # 对卷积后的张量进行逆操作以显示卷积后的图像 img_raw = transform_invert(img_tensor.squeeze(), img_transform) plt.subplot(122).imshow(img_conv, cmap='gray') plt.subplot(121).imshow(img_raw) plt.show()
transforms.ToTensor(), transforms.Normalize(norm_mean, norm_std), ]) net = torch.load("./1.pth") BASE_DIR = os.path.dirname(os.path.abspath(__file__)) test_dir = os.path.join(BASE_DIR, "test_data") test_data = DogCatDataset(data_dir=test_dir, transform=valid_transform) valid_loader = DataLoader(dataset=test_data, batch_size=1) # net = MyNet(classes=2) for i, data in enumerate(valid_loader): # forward inputs, labels = data inputs = inputs.to("cuda") labels = labels.to("cuda") outputs = net(inputs) device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") net = net.to(device) _, predicted = torch.max(outputs.data.cpu(), 1) rmb = 'dog' if predicted.numpy()[0] == 0 else 'cat' print("模型获得动物是{}".format(rmb)) img_tensor = inputs[0, ...] # c H W img = transform_invert(img_tensor.cpu(), train_transform) plt.imshow(img) plt.title("LeNet got {} Yuan".format(rmb)) plt.show() plt.pause(0.5) plt.close()