八度卷积

keras-octave-conv的Python项目详细描述


凯拉斯倍频程转换器

TravisCoverage996.ICU

非正式实施Drop an Octave: Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution

安装

pip install keras-octave-conv

用法

除了padding参数被强制为'same'之外,OctaveConv2D层可以像Conv2D层一样使用。

第一倍频程

对第一个倍频程层使用单个输入:

fromkeras.layersimportInputfromkeras_octave_convimportOctaveConv2Dinputs=Input(shape=(32,32,3))high,low=OctaveConv2D(filters=16,kernel_size=3,octave=2,ratio_out=0.125)(inputs)

这两个输出以较高和较低的空间分辨率表示结果。

特殊参数:

  • octave:默认值是2。空间维度的划分。
  • ratio_out:默认值是0.5。低空间分辨率的滤波器比率。

中间倍频程

中间倍频程层接受两个输入并产生两个输出:

fromkeras.layersimportInput,MaxPool2Dfromkeras_octave_convimportOctaveConv2Dinputs=Input(shape=(32,32,3))high,low=OctaveConv2D(filters=16,kernel_size=3)(inputs)high,low=MaxPool2D()(high),MaxPool2D()(low)high,low=OctaveConv2D(filters=8,kernel_size=3)([high,low])

注意,在整个模型中应该使用相同的octave值。

最后八度

ratio_out设置为0.0,以获得用于进一步处理的单个输出:

fromkeras.layersimportInput,MaxPool2D,Flatten,Densefromkeras.modelsimportModelfromkeras_octave_convimportOctaveConv2Dinputs=Input(shape=(32,32,3))high,low=OctaveConv2D(filters=16,kernel_size=3)(inputs)high,low=MaxPool2D()(high),MaxPool2D()(low)high,low=OctaveConv2D(filters=8,kernel_size=3)([high,low])high,low=MaxPool2D()(high),MaxPool2D()(low)conv=OctaveConv2D(filters=4,kernel_size=3,ratio_out=0.0)([high,low])flatten=Flatten()(conv)outputs=Dense(units=10,activation='softmax')(flatten)model=Model(inputs=inputs,outputs=outputs)model.summary()

效用

octave_dual有助于创建用于处理倍频程卷积输出的双层:

fromkeras.layersimportInput,MaxPool2D,Flatten,Densefromkeras.modelsimportModelfromkeras_octave_convimportOctaveConv2D,octave_dualinputs=Input(shape=(32,32,3))conv=OctaveConv2D(filters=16,kernel_size=3)(inputs)pool=octave_dual(conv,MaxPool2D())conv=OctaveConv2D(filters=8,kernel_size=3)(pool)pool=octave_dual(conv,MaxPool2D())conv=OctaveConv2D(filters=4,kernel_size=3,ratio_out=0.0)(pool)flatten=Flatten()(conv)outputs=Dense(units=10,activation='softmax')(flatten)model=Model(inputs=inputs,outputs=outputs)model.summary()

octave_conv_2d创建具有内置keras层的倍频程结构:

fromkeras.layersimportInput,MaxPool2D,Flatten,Densefromkeras.modelsimportModelfromkeras.utilsimportplot_modelfromkeras_octave_convimportoctave_conv_2d,octave_dualinputs=Input(shape=(32,32,3),name='Input')conv=octave_conv_2d(inputs,filters=16,kernel_size=3,name='Octave-First')pool=octave_dual(conv,MaxPool2D(name='Pool-1'))conv=octave_conv_2d(pool,filters=8,kernel_size=3,name='Octave-Mid')pool=octave_dual(conv,MaxPool2D(name='Pool-2'))conv=octave_conv_2d(pool,filters=4,kernel_size=3,ratio_out=0.0,name='Octave-Last')flatten=Flatten(name='Flatten')(conv)outputs=Dense(units=10,activation='softmax',name='Output')(flatten)model=Model(inputs=inputs,outputs=outputs)model.summary()plot_model(model,to_file='octave_model.png')

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在EclipseIndigo上安装新的Glassfish服务器   java打印组织的最短方法是什么。w3c。多姆。文件发送到stdout?   安卓 java。lang.NullPointerException:尝试在oncreate方法中的null对象引用上调用virtual方法   linux java,我的线程无一例外地终止了,为什么?   JSON和Lombok构造函数的java问题Jackson反序列化   Spring引导升级后,java无法实例化自定义库的数据源   输入Kotlin中Java Scanner的等价物是什么?   列表vs数组作为java中递归的参数   创建名为“FilterService”的bean时发生java错误:通过字段“filterDAO”表示的未满足的依赖关系   如何在Java(基本上是Android)中将指纹图像的字节数组转换为iso 19794_2?   java如何使用基本适配器单击每个位置   java如何更新数据库显示消息“您的数据库已更新,没有任何错误,但实际上我的数据库未更新”   不同比例的安卓屏幕设备的java程序   java Android For循环,全局静态列表与本地列表