TensorFlow之keras.layers.Conv2D( )
keras.layers.Conv2D( ) 函数参数
- def __init__(self, filters,
- kernel_size,
- strides=(1, 1),
- padding='valid',
- data_format=None,
- dilation_rate=(1, 1),
- activation=None,
- use_bias=True,
- kernel_initializer='glorot_uniform',
- bias_initializer='zeros',
- kernel_regularizer=None,
- bias_regularizer=None,
- activity_regularizer=None,
- kernel_constraint=None,
- bias_constraint=None,
- **kwargs):
参数:
filters 卷积核个数的变化,filters 影响的是最后输入结果的的第三个维度的变化,例如,输入的维度是 (600, 600, 3), filters 的个数是 64,转变后的维度是 (600, 600, 64)
- >>> from keras.layers import (Input, Reshape)
- >>> input = Input(shape=(600, 600, 3))
- >>> x = Conv2D(64, (1, 1), strides=(1, 1), name='conv1')(input)
- >>> x
- <tf.Tensor 'conv1_1/BiasAdd:0' shape=(?, 600, 600, 64) dtype=float32>
kernel_size 参数 表示卷积核的大小,可以直接写一个数,影响的是输出结果前两个数据的维度,例如,(600, 600, 3)=> (599, 599, 64)
- >>> from keras.layers import (Input, Conv2D)
- >>> input = Input(shape=(600, 600, 3))
- >>> Conv2D(64, (2, 2), strides=(1, 1), name='conv1')(input)
- <tf.Tensor 'conv1/BiasAdd:0' shape=(?, 599, 599, 64) dtype=float32>
直接写 2 也是可以的
- >>> from keras.layers import (Input, Conv2D)
- >>> input = Input(shape=(600, 600, 3))
- >>> Conv2D(64, 2, strides=(1, 1), name='conv1')(input)
- <tf.Tensor 'conv1_2/BiasAdd:0' shape=(?, 599, 599, 64) dtype=float32>
strides 步长 同样会影响输出的前两个维度,例如,(600, 600, 3)=> (300, 300, 64),值得注意的是,括号里的数据可以不一致,分别控制横坐标和纵坐标,这里步长的计算公式为:
- >>> from keras.layers import (Input, Conv2D)
- >>> input = Input(shape=(600, 600, 3))
- >>> Conv2D(64, 1, strides=(2, 2), name='conv1')(input)
- <tf.Tensor 'conv1_4/BiasAdd:0' shape=(?, 300, 300, 64) dtype=float32>
padding 是否对周围进行填充,“same” 即使通过kernel_size 缩小了维度,但是四周会填充 0,保持原先的维度;“valid”表示存储不为0的有效信息。多个对比效果如下:
- >>> Conv2D(64, 1, strides=(2, 2), padding="same", name='conv1')(input)
- <tf.Tensor 'conv1_6/BiasAdd:0' shape=(?, 300, 300, 64) dtype=float32>
- >>> Conv2D(64, 3, strides=(2, 2), padding="same", name='conv1')(input)
- <tf.Tensor 'conv1_7/BiasAdd:0' shape=(?, 300, 300, 64) dtype=float32>
- >>> Conv2D(64, 3, strides=(1, 1), padding="same", name='conv1')(input)
- <tf.Tensor 'conv1_8/BiasAdd:0' shape=(?, 600, 600, 64) dtype=float32>
- >>> Conv2D(64, 3, strides=(1, 1), padding="valid", name='conv1')(input)
- <tf.Tensor 'conv1_9/BiasAdd:0' shape=(?, 598, 598, 64) dtype=float32>
通过这种最简单的方式,可以观察 ResNet50 的组成结构
Conv Block 的架构:
- def conv_block(input_tensor, kernel_size, filters, stage, block, strides):
- filters1, filters2, filters3 = filters # filters1 64, filters3 256 将数值传入到filters。。。中
- conv_name_base = 'res' + str(stage) + block + '_branch'
- bn_name_base = 'bn' + str(stage) + block + '_branch'
- x = Conv2D(filters1, (1, 1), strides=strides, name=conv_name_base + '2a')(input_tensor)
- x = BatchNormalization(name=bn_name_base + '2a')(x)
- x = Activation('relu')(x)
- x = Conv2D(filters2, kernel_size, padding='same', name=conv_name_base + '2b')(x)
- x = BatchNormalization(name=bn_name_base + '2b')(x)
- x = Activation('relu')(x)
- x = Conv2D(filters3, (1, 1), name=conv_name_base + '2c')(x)
- x = BatchNormalization(name=bn_name_base + '2c')(x)
- shortcut = Conv2D(filters3, (1, 1), strides=strides, name=conv_name_base + '1')(input_tensor)
- shortcut = BatchNormalization(name=bn_name_base + '1')(shortcut)
- x = layers.add([x, shortcut])
- x = Activation("relu")(x)
- return x
Identity Block 的架构:
- def identity_block(input_tensor, kernel_size, filters, stage, block):
- filters1, filters2, filters3 = filters
- conv_name_base = 'res' + str(stage) + block + '_branch'
- bn_name_base = 'bn' + str(stage) + block + '_branch'
- x = Conv2D(filters1, (1, 1), name=conv_name_base + '2a')(input_tensor)
- x = BatchNormalization(name=bn_name_base + '2a')(x)
- x = Activation('relu')(x)
- x = Conv2D(filters2, kernel_size, padding='same', name=conv_name_base + '2b')(input_tensor)
- x = BatchNormalization(name=bn_name_base + '2b')(x)
- x = Activation('relu')(x)
- x = Conv2D(filters3, (1, 1), name=conv_name_base + '2c')(input_tensor)
- x = BatchNormalization(name=bn_name_base + '2c')(x)
- x = layers.add([x, input_tensor])
- x = Activation('relu')(x)
- return x
附上理论链接 Resnet-50网络结构详解 https://www.cnblogs.com/qianchaomoon/p/12315906.html
TensorFlow之keras.layers.Conv2D( )的更多相关文章
- tensorflow和keras混用
在tensorflow中可以调用keras,有时候让模型的建立更加简单.如下这种是官方写法: import tensorflow as tf from keras import backend as ...
- Tensorflow1.4 高级接口使用(estimator, data, keras, layers)
TensorFlow 高级接口使用简介(estimator, keras, data, experiment) TensorFlow 1.4正式添加了keras和data作为其核心代码(从contri ...
- TensorFlow和Keras完成JAFFE人脸表情识别
cut_save_face.py #!/usr/bin/python # coding:utf8 import cv2 import os import numpy as np import csv ...
- 『计算机视觉』Mask-RCNN_推断网络其二:基于ReNet101的FPN共享网络暨TensorFlow和Keras交互简介
零.参考资料 有关FPN的介绍见『计算机视觉』FPN特征金字塔网络. 网络构架部分代码见Mask_RCNN/mrcnn/model.py中class MaskRCNN的build方法的"in ...
- Keras(七)Keras.layers各种层介绍
一.网络层 keras的层主要包括: 常用层(Core).卷积层(Convolutional).池化层(Pooling).局部连接层.递归层(Recurrent).嵌入层( Embedding).高级 ...
- 对抗生成网络-图像卷积-mnist数据生成(代码) 1.tf.layers.conv2d(卷积操作) 2.tf.layers.conv2d_transpose(反卷积操作) 3.tf.layers.batch_normalize(归一化操作) 4.tf.maximum(用于lrelu) 5.tf.train_variable(训练中所有参数) 6.np.random.uniform(生成正态数据
1. tf.layers.conv2d(input, filter, kernel_size, stride, padding) # 进行卷积操作 参数说明:input输入数据, filter特征图的 ...
- TensorFlow——tf.contrib.layers库中的相关API
在TensorFlow中封装好了一个高级库,tf.contrib.layers库封装了很多的函数,使用这个高级库来开发将会提高效率,卷积函数使用tf.contrib.layers.conv2d,池化函 ...
- Anaconda安装tensorflow和keras(gpu版,超详细)
本人配置:window10+GTX 1650+tensorflow-gpu 1.14+keras-gpu 2.2.5+python 3.6,亲测可行 一.Anaconda安装 直接到清华镜像网站下载( ...
- 深度学习基础系列(五)| 深入理解交叉熵函数及其在tensorflow和keras中的实现
在统计学中,损失函数是一种衡量损失和错误(这种损失与“错误地”估计有关,如费用或者设备的损失)程度的函数.假设某样本的实际输出为a,而预计的输出为y,则y与a之间存在偏差,深度学习的目的即是通过不断地 ...
随机推荐
- Mybatis(一)Porxy动态代理和sql解析替换
JDK常用核心原理 概述 在 Mybatis 中,常用的作用就是讲数据库中的表的字段映射为对象的属性,在进入Mybatis之前,原生的 JDBC 有几个步骤:导入 JDBC 驱动包,通过 Driver ...
- 『政善治』Postman工具 — 2、Postman主界面详细介绍
目录 1.Postman菜单栏 (1)File 菜单 (2)Edit 菜单 (3)View 菜单 (4)Help 菜单 2.Postman工具栏 3.Postman工具栏中的系统设置 4.Postma ...
- php swoole 和 websocket的初次碰撞
php swoole 扩展仿佛为php开发打开了一扇窗户 阅读文档 https://wiki.swoole.com php workman和swoole原来是两个东东 swoole的使用范围更广,能做 ...
- WordPress 函数do_action()详解和应用举例
do_action()函数: 我们经常能看到在一些WordPress函数中调用了do_action()函数,例如get_header(), get_footer()等调用模板的函数中经常调用do_ ...
- 接口测试的N中玩法
在我看来接口测试相对其他类型的测试是比较简单的.对于最常见的HTTP接口,只需要知道接口的 URL.方法.参数类型.返回值 ... 就可以对接口进行测试了. apifox 如果你是入门级选手,那么ap ...
- 启动QQ时出现无法访问个人文件夹怎么决解
找了一圈的百度,真正有用的. 在设置中进行修改. https://zhidao.baidu.com/question/2073820786837168348.html 打开设置的其中页面 你的IT管理 ...
- 修改VScode底部状态栏颜色
点击齿轮进入setting 搜索workbench.colorCustomizations,然后点击编辑setting.json 修改为你喜欢的颜色即可,我这里修改为蓝色 例子: "work ...
- 【maven】maven资源过滤问题<build>
需要在pom.xml加入以下代码(在父项目添加即可,如果还不行的话,就在子module的pom.xml也添加) <build> <resources> <resource ...
- 求曲线y=lnx在区间(2,6)内的一条切线,使得该切线与直线x=2,x=6及曲线y=lnx所围成的图形的面积最小。
求曲线y=lnx在区间(2,6)内的一条切线,使得该切线与直线x=2,x=6及曲线y=lnx所围成的图形的面积最小. 1.先画图. 2.设切点为(a,lna) (2<a<6) 3.切线方程 ...
- Mac安装python 环境& pychaem
一.文档说明 在Mac上其实自带python环境,但是很多的library安装python是2.7的版本. 验证:可以在终端Terminal中输入:python 如下图是未安装之前,但是咱们需要在自己 ...