我是靠谱客的博主 大力草丛,最近开发中收集的这篇文章主要介绍【已解决】dnnsvg:AssertionError错误,深度学习框架模型矢量图错误解决办法:将输入图改为(195,195),就可以解决为什么不能是(224,224)?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

错误

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

上图
AlexNet

为什么不能是(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}} shnhkh+ph+shswnwkw+pw+sw
n h 表 示 输 入 图 片 的 h e i g h t n_{h}表示输入图片的height nhheight
k h 表 示 输 入 图 片 经 过 那 一 层 运 算 的 k e r n e l _ s i z e 的 h e i g h t k_{h}表示输入图片经过那一层运算的kernel_size的height khkernel_sizeheight
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 phpaddingpadding2pad=1,ph=2
s h 表 示 输 入 图 片 经 过 那 一 层 的 步 幅 值 s t r i d e s s_{h}表示输入图片经过那一层的步幅值strides shstrides

举个例子:有一张图片我们只计算它经过一层卷积层后的窗口变化,不考虑通道数。
输入图片为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)?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部