彩世界平台-彩世界时时app-彩世界开奖app苹果下载

热门关键词: 彩世界平台,彩世界时时app,彩世界开奖app苹果下载

您的位置:彩世界平台 > 彩世界平台 > TensorFlow 深度学习笔记 卷积神经网络

TensorFlow 深度学习笔记 卷积神经网络

发布时间:2019-09-06 01:47编辑:彩世界平台浏览(194)

    转载请注明作者:梦里风林Github工程地址:

    转载请注明作者:梦里风林Github工程地址:

    • 使用text8作为训练的文本数据集

    deep dive into images and convolutional models

    text8中只包含27种字符:小写的从a到z,以及空格符。如果把它打出来,读起来就像是去掉了所有标点的wikipedia。

    BackGround

    • 人眼在识别图像时,往往从局部到全局
    • 局部与局部之间联系往往不太紧密
    • 我们不需要神经网络中的每个结点都掌握全局的知识,因此可以从这里减少需要学习的参数数量
    • 直接调用lesson1中maybe_download下载text8.zip
    • 用zipfile读取zip内容为字符串,并拆分成单词list
    • 用connections模块统计单词数量并找出最常见的单词

    Weight share

    • 但这样参数其实还是挺多的,所以有了另一种方法:权值共享

    Share Parameters across space

    • 取图片的一小块,在上面做神经网络分析,会得到一些预测

    • 将切片做好的神经网络作用于图片的每个区域,得到一系列输出

    • 可以增加切片个数提取更多特征

    • 在这个过程中,梯度的计算跟之前是一样的

    达成随机取数据的目标

    Concept

    图片 1

    • Patch/Kernel:一个局部切片
    • Depth: 数据的深度,图像数据是三维的,长宽和RGB,神经网络的预测输出也属于一维
    • Feature Map:每层Conv网络,因为它们将前一层的feature映射到后一层(Output map)

    图片 2

    • Stride: 移动切片的步长,影响取样的数量
    • 在边缘上的取样影响Conv层的面积,由于移动步长不一定能整除整张图的像素宽度,不越过边缘取样会得到Valid Padding, 越过边缘取样会得到Same Padding
    • Example

    图片 3

    • 用一个3x3的网格在一个28x28的图像上做切片并移动
    • 移动到边缘上的时候,如果不超出边缘,3x3的中心就到不了边界
    • 因此得到的内容就会缺乏边界的一圈像素点,只能得到26x26的结果
    • 而可以越过边界的情况下,就可以让3x3的中心到达边界的像素点
    • 超出部分的矩阵补零就行

    在Convnet上套Convnet,就可以一层一层综合局部得到的信息

    将一个deep and narrow的feature层作为输入,传给一个Regular神经网络

    图片 4

    embeddings = tf.Variable( tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))
    

    Pooling

    将不同Stride的卷积用某种方式合并起来,节省卷积层的空间复杂度。

    • Max Pooling在一个卷积层的输出层上取一个切片,取其中最大值代表这个切片
    • 优点
      • 不增加需要调整的参数
      • 通常比其他方法准确
    • 缺点:更多Hyper Parameter,包括要取最值的切片大小,以及去切片的步长

    LENET-5, ALEXNET

    • Average Pooling在卷积层输出中,取切片,取平均值代表这个切片
    • 构造一个vocabulary_size x embedding_size的矩阵,作为embeddings容器,
    • 有vocabulary_size个容量为embedding_size的向量,每个向量代表一个vocabulary,
    • 每个向量的中的分量的值都在-1到1之间随机分布

    1x1 Convolutions

    在一个卷积层的输出层上,加一个1x1的卷积层,这样就形成了一个小型的神经网络。

    • cheap for deeper model
    • 结合Average Pooling食用效果更加

    Inception

    对同一个卷积层输出,执行各种二次计算,将各种结果堆叠到新输出的depth方向上

    图片 5

    • dataset处理成四维的,label仍然作为one-hot encoding
    def reformat(dataset, labels, image_size, num_labels, num_channels): dataset = dataset.reshape( (-1, image_size, image_size, num_channels)).astype(np.float32) labels = (np.arange(num_labels) == labels[:, None]).astype(np.float32) return dataset, labels
    
    • 将lesson2的dnn转为cnn很简单,只要把WX+b改为conv2d+b即可
    • 关键在于conv2d
    embed = tf.nn.embedding_lookup(embeddings, train_dataset)
    

    tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None) {#conv2d}

    给定四维的inputfilter tensor,计算一个二维卷积

    • 调用tf.nn.embedding_lookup,索引与train_dataset对应的向量,相当于用train_dataset作为一个id,去检索矩阵中与这个id对应的embedding
    Args:
    • <b>input</b>: A Tensor. type必须是以下几种类型之一: half, float32, float64.
    • <b>filter</b>: A Tensor. type和input必须相同
    • <b>strides</b>: A list of ints.一维,长度4, 在input上切片采样时,每个方向上的滑窗步长,必须和format指定的维度同阶
    • <b>padding</b>: A string from: "SAME", "VALID". padding 算法的类型
    • <b>use_cudnn_on_gpu</b>: An optional bool. Defaults to True.
    • <b>data_format</b>: An optional string from: "NHWC", "NCHW", 默认为"NHWC"。指定输入输出数据格式,默认格式为"NHWC", 数据按这样的顺序存储:[batch, in_height, in_width, in_channels]也可以用这种方式:"NCHW", 数据按这样的顺序存储:[batch, in_channels, in_height, in_width]
    • <b>name</b>: 操作名,可选.
    Returns:

    A Tensor. type与input相同

    Given an input tensor of shape [batch, in_height, in_width, in_channels]and a filter / kernel tensor of shape[filter_height, filter_width, in_channels, out_channels]

    conv2d实际上执行了以下操作:

    1. 将filter转为二维矩阵,shape为[filter_height * filter_width * in_channels, output_channels].
    2. 从input tensor中提取image patches,每个patch是一个virtual tensor,shape[batch, out_height, out_width, filter_height * filter_width * in_channels].
    3. 将每个filter矩阵和image patch向量相乘

    具体来讲,当data_format为NHWC时:

    output[b, i, j, k] = sum_{di, dj, q} input[b, strides[1] * i + di, strides[2] * j + dj, q] * filter[di, dj, q, k]
    

    input 中的每个patch都作用于filter,每个patch都能获得其他patch对filter的训练需要满足strides[0] = strides[3] = 1. 大多数水平步长和垂直步长相同的情况下:strides = [1, stride, stride, 1].

    • 然后再接一个WX+b连Relu连WX+b的全连接神经网络即可

    在tf.nn.conv2d后面接tf.nn.max_pool,将卷积层输出减小,从而减少要调整的参数

    loss = tf.reduce_mean( tf.nn.sampled_softmax_loss(softmax_weights, softmax_biases, embed, train_labels, num_sampled, vocabulary_size))
    

    tf.nn.max_pool(value, ksize, strides, padding, data_format='NHWC', name=None) {#max_pool}

    Performs the max pooling on the input.

    • 采样计算训练损失
    Args:
    • <b>value</b>: A 4-D Tensor with shape [batch, height, width, channels] andtype tf.float32.
    • <b>ksize</b>: A list of ints that has length >= 4. 要执行取最值的切片在各个维度上的尺寸
    • <b>strides</b>: A list of ints that has length >= 4. 取切片的步长
    • <b>padding</b>: A string, either 'VALID' or 'SAME'. padding算法
    • <b>data_format</b>: A string. 'NHWC' and 'NCHW' are supported.
    • <b>name</b>: 操作名,可选
    Returns:

    A Tensor with type tf.float32. The max pooled output tensor.

    仿照lesson2,添加learning rate decay 和 drop out,可以将准确率提高到90.6%

    • Tensorflow 中 conv2d 都干了啥
    • TensorFlow Example
    • 张雨石 Conv神经网络
    • Bill Xia 卷积神经网络

    觉得我的文章对您有帮助的话,给个star可好?

    optimizer = tf.train.AdagradOptimizer.minimize
    
    • 自适应梯度调节器,调节embedding列表的数据,使得偏差最小

    • 预测,并用cos值计算预测向量与实际数据的夹角作为预测准确度指标

    • 切割数据用于训练,其中:

    本文由彩世界平台发布于彩世界平台,转载请注明出处:TensorFlow 深度学习笔记 卷积神经网络

    关键词:

上一篇:深度学习十大顶级框架

下一篇:没有了