概述
错误
from dnnsvg.layers import Convolution2D
from dnnsvg.layers import Deconvolution2D
from dnnsvg.layers import FullyConnected
from dnnsvg.layers import FullyConnectedLSTM
from dnnsvg.layers import MaxPooling
from dnnsvg.layers import Reshape
from dnnsvg import Tensor3D
from dnnsvg import SVGBuilder
import argparse
import os
def write_svg_to_file(filename, svg):
with open(filename, 'w') as f:
f.write(svg)
def AlexNet():
width = 900
height = 400
initial_position = (100, height / 2.0)
input_tensor = Tensor3D(x=initial_position[0],
y=initial_position[1],
depth=1,
height=224,
width=224,
scale=(0.1, 1, 1))
svg = SVGBuilder(height=height, width=width)
.add_layer(Convolution2D(in_channels=None, out_channels=96, ksize=11, stride=4))
.add_layer(MaxPooling(ksize=3, stride=2))
.add_layer(Convolution2D(in_channels=96, out_channels=256, ksize=5, stride=1, pad=2))
.add_layer(MaxPooling(ksize=3, stride=2))
.add_layer(Convolution2D(in_channels=256, out_channels=384, ksize=3, stride=1, pad=1))
.add_layer(Convolution2D(in_channels=384, out_channels=384, ksize=3, stride=1, pad=1))
.add_layer(Convolution2D(in_channels=384, out_channels=256, ksize=3, stride=1, pad=1))
.add_layer(MaxPooling(ksize=3, stride=2))
.add_layer(Reshape(output_shape=(1, 6400)))
.add_layer(FullyConnected(output_shape=(1, 4096)))
.add_layer(FullyConnected(output_shape=(1, 4096)))
.add_layer(FullyConnected(output_shape=(1, 10)))
.build(input_tensor)
filename = 'AlexNet.svg'
if os.path.exists(filename):
os.remove('AlexNet.svg')
write_svg_to_file(filename, svg)
else:
write_svg_to_file(filename, svg)
AlexNet()
D:UsersZPJMiniconda3python.exe "C:/Users/ZPJ/Desktop/d2l-zh/Untitled Folder/drawgraph.py"
Traceback (most recent call last):
File "C:/Users/ZPJ/Desktop/d2l-zh/Untitled Folder/drawgraph.py", line 74, in <module>
AlexNet()
File "C:/Users/ZPJ/Desktop/d2l-zh/Untitled Folder/drawgraph.py", line 65, in AlexNet
.build(input_tensor)
File "D:UsersZPJMiniconda3libsite-packagesdnnsvg-0.0.1-py3.7.eggdnnsvgsvg_builder.py", line 19, in build
File "D:UsersZPJMiniconda3libsite-packagesdnnsvg-0.0.1-py3.7.eggdnnsvglayerstensor_decorator.py", line 6, in __call__
File "D:UsersZPJMiniconda3libsite-packagesdnnsvg-0.0.1-py3.7.eggdnnsvglayersreshape.py", line 21, in decorate
File "D:UsersZPJMiniconda3libsite-packagesdnnsvg-0.0.1-py3.7.eggdnnsvglayersreshape.py", line 122, in _assert_has_same_size
AssertionError
解决办法:将输入图改为(195,195),就可以解决
input_tensor = Tensor3D(x=initial_position[0],
y=initial_position[1],
depth=1,
height=195,
width=195,
scale=(0.1, 1, 1))
D:UsersZPJMiniconda3python.exe "C:/Users/ZPJ/Desktop/d2l-zh/Untitled Folder/drawgraph.py"
Process finished with exit code 0
上图
为什么不能是(224,224)?
解析
图像每经过一层的时候,这个式子
经过一层输出图像size计算公式
n
h
−
k
h
+
p
h
+
s
h
s
h
∗
n
w
−
k
w
+
p
w
+
s
w
s
w
dfrac {n_{h}-k_{h}+p_{h}+s_{h}}{s_{h}}*dfrac {n_{w}-k_{w}+p_{w}+s_{w}}{s_{w}}
shnh−kh+ph+sh∗swnw−kw+pw+sw
n
h
表
示
输
入
图
片
的
h
e
i
g
h
t
n_{h}表示输入图片的height
nh表示输入图片的height
k
h
表
示
输
入
图
片
经
过
那
一
层
运
算
的
k
e
r
n
e
l
_
s
i
z
e
的
h
e
i
g
h
t
k_{h}表示输入图片经过那一层运算的kernel_size的height
kh表示输入图片经过那一层运算的kernel_size的height
p
h
表
示
输
入
图
片
经
过
那
一
层
运
算
的
p
a
d
d
i
n
g
值
记
得
p
a
d
d
i
n
g
值
应
该
要
乘
2
才
对
例
如
p
a
d
=
1
,
p
h
=
2
p_{h}表示输入图片经过那一层运算的padding值,记得padding值应该要乘2才对 例如pad=1,p_{h}=2
ph表示输入图片经过那一层运算的padding值记得padding值应该要乘2才对例如pad=1,ph=2
s
h
表
示
输
入
图
片
经
过
那
一
层
的
步
幅
值
s
t
r
i
d
e
s
s_{h}表示输入图片经过那一层的步幅值strides
sh表示输入图片经过那一层的步幅值strides
举个例子:有一张图片我们只计算它经过一层卷积层后的窗口变化,不考虑通道数。
输入图片为28*28,卷积层为conv2D(in_channel=None, out_channel=6, ksize=11, stride=4, pad=1)
n
h
=
28
,
k
h
=
11
,
p
h
=
2
,
s
h
=
4
n_{h}=28 , k_{h}=11 , p_{h}=2 , s_{h}=4
nh=28 ,kh=11 ,ph=2 ,sh=4
输出图片的 height * weight = 5.75 * 5.75
使用dnnsvg的时候,并不能自动把5.75化成5,所以就会报错,也就是每一层的都可以把输入图片整数处理输出图片。
每一层的通道也要设置好,不然一样也会报错,
最后
以上就是大力草丛为你收集整理的【已解决】dnnsvg:AssertionError错误,深度学习框架模型矢量图错误解决办法:将输入图改为(195,195),就可以解决为什么不能是(224,224)?的全部内容,希望文章能够帮你解决【已解决】dnnsvg:AssertionError错误,深度学习框架模型矢量图错误解决办法:将输入图改为(195,195),就可以解决为什么不能是(224,224)?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复