【发布时间】:2020-04-22 20:24:46
【问题描述】:
我试图想象当 color 图像通过卷积层时会发生什么。为此,我使用零和一设置自定义权重。 我面临的问题是我丢失了 3D 通道,并在将数据通过图层后获得了 1D 通道。
import requests
from io import BytesIO
from PIL import Image
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
import numpy as np
link = 'https://audimediacenter-a.akamaihd.net/system/production/media/85094/images' \
'/2a4e98976b1f9088fe6ae883f2f29e4d8f3ed473/A1912967_x500.jpg?1575885688'
r = requests.get(link, timeout=10)
im = Image.open(BytesIO(r.content))
pic = np.array(im)
horizontal_filter = torch.zeros(5, 5)
horizontal_filter[2, :] = 1
print(horizontal_filter)
这是我的自定义过滤器:
tensor([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[1., 1., 1., 1., 1.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
现在我正在使用自定义过滤器并重复它以适应 3 个通道。
hz = nn.Conv2d(in_channels=3,
out_channels=3,
kernel_size=5,
stride=1,
bias=None)
hz.weight.data = horizontal_filter.type('torch.FloatTensor').repeat(1, 3, 1, 1)
print(hz.weight.data.shape)
这是过滤器的形状:
torch.Size([1, 3, 5, 5])
我通过卷积过滤器,我失去了 3 个通道:
zz = hz(torch.tensor(pic[None, ...]).permute(0, 3, 1, 2).type('torch.FloatTensor'))
print(np.transpose(zz.detach().numpy(), (0, 2, 3, 1)).shape)
(1, 329, 496, 1)
如果我绘制它,我就没有颜色了。
z = np.transpose(zz.detach().numpy(), (0, 2, 3, 1))[0, :, :, 0]
f, axarr = plt.subplots()
axarr.imshow(z)
plt.show()
tl;dr:如何通过卷积层传递 3D 图片并返回具有 3 个通道的图像?
【问题讨论】:
标签: python conv-neural-network pytorch rgb