Esempio n. 1
0
    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()
Esempio n. 2
0
# ============================ 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()
Esempio n. 4
0
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()
Esempio n. 7
0
        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()