要渲染形状为27x35的图像,请使用:
random_image = []
for x in range(1 , 946):
random_image.append(random.randint(0 , 255))
random_image_arr = np.array(random_image)
matplotlib.pyplot.imshow(random_image_arr.reshape(27 , 35))
这将生成:
然后我尝试使用torch.nn.Conv2d
对图像进行卷积:
conv2 = torch.nn.Conv2d(3, 18, kernel_size=3, stride=1, padding=1)
image_d = np.asarray(random_image_arr.reshape(27 , 35))
conv2(torch.from_numpy(image_d))
但这会显示错误:
~/.local/lib/python3.6/site-packages/torch/nn/modules/conv.py in forward(self, input)
299 def forward(self, input):
300 return F.conv2d(input, self.weight, self.bias, self.stride,
--> 301 self.padding, self.dilation, self.groups)
302
303
RuntimeError: input has less dimensions than expected
输入image_d
的形状为(27, 35)
是否应该更改Conv2d
的参数以便将卷积应用于图像?
更新。来自@McLawrence的答案是:
random_image = []
for x in range(1 , 946):
random_image.append(random.randint(0 , 255))
random_image_arr = np.array(random_image)
matplotlib.pyplot.imshow(random_image_arr.reshape(27 , 35))
这将渲染图像:
应用卷积运算:
conv2 = torch.nn.Conv2d(1, 18, kernel_size=3, stride=1, padding=1)
image_d = torch.FloatTensor(np.asarray(random_image_arr.reshape(1, 1, 27 , 35))).numpy()
fc = conv2(torch.from_numpy(image_d))
matplotlib.pyplot.imshow(fc [0] [0] .data.numpy())
提供图片:
答案 0 :(得分:1)
您的代码有两个问题:
首先,class Circle {
constructor(opt) {
this.x = opt.x;
this.y = opt.y;
this.radius = opt.radius;
this.color = opt.color;
}
draw() {
let div = document.createElement('div');
div.style.width = this.radius + 'px';
div.style.height = this.radius + 'px';
div.style.border = '1px solid;';
div.style.borderRadius = '50%';
div.style.backgroundColor = this.color;
document.body.appendChild(div);
}
}
let options = {
x: 1500,
y: 100,
radius: 100,
color: 'red'
};
let circle = new Circle(options);
circle.draw();
中的2d卷积仅对于4d张量为defined。
这在神经网络中使用很方便。第一维是批次大小,而第二维是通道(例如,RGB图像具有三个通道)。所以你必须像重塑张量
pytorch
image_d = torch.FloatTensor(np.asarray(random_image_arr.reshape(1, 1, 27 , 35)))
在这里很重要,因为在FloatTensor
数组仅包含LongTensor
的情况下,numpy
上不会自动创建卷积。
第二,您创建了具有三个输入通道的卷积,而图像只有一个通道(灰度)。因此,您必须将卷积调整为:
int