在tf1.0中,对卷积层重新进行了封装,比原来版本的卷积层有了很大的简化。

一、旧版本(1.0以下)的卷积函数:tf.nn.conv2d

conv2d(
input,
filter,
strides,
padding,
use_cudnn_on_gpu=None,
data_format=None,
name=None
)

该函数定义在tensorflow/python/ops/gen_nn_ops.py

参数:

    • input: 一个4维Tensor(N,H,W,C). 类型必须是以下几种类型之一: half, float32, float64.
    • filter: 卷积核. 类型和input必须相同,4维tensor, [filter_height, filter_width, in_channels, out_channels],如[5,5,3,32]
    • strides:  在input上切片采样时,每个方向上的滑窗步长,必须和format指定的维度同阶,如[1, 2, 2, 1]
    • padding: 指定边缘填充类型: "SAME", "VALID". SAME表示卷积后图片保持不变,VALID则会缩小。
    • use_cudnn_on_gpu: 可选项,bool型。表示是否在GPU上用cudnn进行加速,默认为True.
    • data_format: 可选项,指定输入数据的格式: "NHWC"或 "NCHW", 默认为"NHWC"
      NHWC格式指[batch, in_height, in_width, in_channels]
      NCHW格式指[batch, in_channels, in_height, in_width]
    • name: 操作名,可选.
示例:
conv1=tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') 

二、1.0版本中的卷积函数:tf.layers.conv2d

conv2d(
inputs,
filters,
kernel_size,
strides=(1, 1),
padding='valid',
data_format='channels_last',
dilation_rate=(1, 1),
activation=None,
use_bias=True,
kernel_initializer=None,
bias_initializer=tf.zeros_initializer(),
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
trainable=True,
name=None,
reuse=None
)

定义在tensorflow/python/layers/convolutional.py.

参数多了很多,但实际用起来,却更简单。

  • inputs: 输入数据,4维tensor.
  • filters: 卷积核个数。
  • kernel_size:卷积核大小,如【5,5】。如果长宽相等,也可以直接设置为一个数,如kernel_size=5
  • strides: 卷积过程中的滑动步长,默认为[1,1]. 也可以直接设置为一个数,如strides=2
  • padding: 边缘填充,'same' 和'valid‘选其一。默认为valid
  • data_format: 输入数据格式,默认为channels_last ,即 (batch, height, width, channels),也可以设置为channels_first 对应 (batch, channels, height, width).

  • dilation_rate: 微步长卷积,这个比较复杂一些,请百度.

  • activation: 激活函数.
  • use_bias: Boolean型,是否使用偏置项.
  • kernel_initializer: 卷积核的初始化器.
  • bias_initializer: 偏置项的初始化器,默认初始化为0.
  • kernel_regularizer: 卷积核化的正则化,可选.
  • bias_regularizer: 偏置项的正则化,可选.
  • activity_regularizer: 输出的正则化函数.
  • trainable: Boolean型,表明该层的参数是否参与训练。如果为真则变量加入到图集合中 GraphKeys.TRAINABLE_VARIABLES (see tf.Variable).
  • name: 层的名字.
  • reuse: Boolean型, 是否重复使用参数.
示例:

conv1=tf.layers.conv2d(
inputs=x,
filters=32,
kernel_size=5,
padding="same",
activation=tf.nn.relu,
kernel_initializer=tf.TruncatedNormal(stddev=0.01))

更复杂一点的:

conv1 = tf.layers.conv2d(batch_images,
filters=64,
kernel_size=7,
strides=2,
activation=tf.nn.relu,
kernel_initializer=tf.TruncatedNormal(stddev=0.01)
bias_initializer=tf.Constant(0.1),
kernel_regularizer=tf.contrib.layers.l2_regularizer(0.003),
bias_regularizer=tf.contrib.layers.l2_regularizer(0.003),
name='conv1')
												

tensorflow 1.0 学习:卷积层的更多相关文章

  1. 使用TensorFlow v2.0构建卷积神经网络

    使用TensorFlow v2.0构建卷积神经网络. 这个例子使用低级方法来更好地理解构建卷积神经网络和训练过程背后的所有机制. CNN 概述 MNIST 数据集概述 此示例使用手写数字的MNIST数 ...

  2. tensorflow 1.0 学习:池化层(pooling)和全连接层(dense)

    池化层定义在 tensorflow/python/layers/pooling.py. 有最大值池化和均值池化. 1.tf.layers.max_pooling2d max_pooling2d( in ...

  3. tensorflow 1.0 学习:参数和特征的提取

    在tf中,参与训练的参数可用 tf.trainable_variables()提取出来,如: #取出所有参与训练的参数 params=tf.trainable_variables() print(&q ...

  4. tensorflow 1.0 学习:参数初始化(initializer)

    CNN中最重要的就是参数了,包括W,b. 我们训练CNN的最终目的就是得到最好的参数,使得目标函数取得最小值.参数的初始化也同样重要,因此微调受到很多人的重视,那么tf提供了哪些初始化参数的方法呢,我 ...

  5. tensorflow 1.0 学习:用CNN进行图像分类

    tensorflow升级到1.0之后,增加了一些高级模块: 如tf.layers, tf.metrics, 和tf.losses,使得代码稍微有些简化. 任务:花卉分类 版本:tensorflow 1 ...

  6. TensorFlow与caffe中卷积层feature map大小计算

    刚刚接触Tensorflow,由于是做图像处理,因此接触比较多的还是卷及神经网络,其中会涉及到在经过卷积层或者pooling层之后,图像Feature map的大小计算,之前一直以为是与caffe相同 ...

  7. 【深度学习与TensorFlow 2.0】卷积神经网络(CNN)

    注:在很长一段时间,MNIST数据集都是机器学习界很多分类算法的benchmark.初学深度学习,在这个数据集上训练一个有效的卷积神经网络就相当于学习编程的时候打印出一行“Hello World!”. ...

  8. tensorflow 2.0 学习(四)

    这次的mnist学习加入了测试集,看看学习的准确率,代码如下 # encoding: utf-8 import tensorflow as tf import matplotlib.pyplot as ...

  9. tensorflow 1.0 学习:十图详解tensorflow数据读取机制

    本文转自:https://zhuanlan.zhihu.com/p/27238630 在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找 ...

随机推荐

  1. 洛谷 P1338 末日的传说

    题目链接:https://www.luogu.org/problemnew/show/P1338 题目描述 只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次, ...

  2. ----关于统计字符出现次数的JS循环以及indesxOf函数----

    以下将会通过JS循环判断字符“banana”出现次数 以及调用indexOf中的函数来实现统计   <!DOCTYPE html> <html> <body> &l ...

  3. Mysql中存储引擎区别【 InnoDB、MyISAM】

    区别: 1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事 ...

  4. Difference between Load / Stress / Performance Testing

    Load and stress testing are subsets of performance testing. Performance testing means how best somet ...

  5. 使用 Chrome 浏览器插件 Web Scraper 10分钟轻松实现网页数据的爬取

    web scraper 下载:Web-Scraper_v0.2.0.10 使用 Chrome 浏览器插件 Web Scraper 可以轻松实现网页数据的爬取,不写代码,鼠标操作,点哪爬哪,还不用考虑爬 ...

  6. kali自定义分辨率(1920*1080)

    运行一下两行代码: xrandr --newmode -hsync +vsync xrandr --addmode Virtual1 "1920x1080_60.00"

  7. Linux环境下Redis集群实践

    环境:centos 7 一.编译及安装redis源码 源码地址:redis版本发布列表 cd redis-3.2.8 sudo make && make install 二.创建节点 ...

  8. Requests+正则表达式抓取猫眼电影TOP100

    spider.py # -*- coding:utf-8 -*- import requests import re import json import codecs from requests.e ...

  9. Charles 学习笔记

    之前接触过抓包工具Fiddler,一直在Windows下使用,感觉还是挺好用的.今天接触了Charles才有了了解,首先Charles设计的比较美丽,而且页面布局也是简单易学的,但这两款抓包工具本质的 ...

  10. 用python处理csv文件

    1.准备csv文件(这里是平安银行的统计表:下载并另存为pingan.csv) >>> from urllib import urlretrieve >>> url ...