深度学习
文章平均质量分 89
Fang Suk
久居深巷、独忆易人
展开
-
深度学习中优化算法
深度学习常用的优化算法包括:梯度下降,随机梯度下降,小批量随机梯度下降,动量法,AdaGrad,RMSProp,Adam。这些优化算法又涉及到指数加权移动平均。下面先介绍什么是指数加权移动平均。1. 指数加权移动平均指数加权移动平均是几个概念拼到一起的,包括加权平均与移动平均。加权平均:平均分为算术平均和加权平均,算术平均指各项的权重都相等。加权平均各项权重不等。移动平均:移动平均常用于时间序列的平均计算。例如,取前n个时刻的值取平均。相当于有一个窗口在不断向前滑动。指数加权平均:每一项的权重不等原创 2021-05-26 19:33:00 · 568 阅读 · 0 评论 -
pytorch中loss总结
Pytorch中分类loss总结近期在学习pytorch时,发现分类算法在输出时不写激活层如softmax激活/sigmoid激活。并且pytorch文档中除了softmax激活/sigmoid激活外,还有logsoftmax/logsigmoid。以及torch的loss函数会把激活和损失计算都整合到一起计算,给的解释是为了获得更好的数值稳定性。为了弄清这一切,进行了以下探索。并将自己涉及的...原创 2020-04-02 23:00:26 · 4286 阅读 · 0 评论 -
pytorch中parameter和Module类总结
看了pytorch官网parameters和Module部分。做个部分测试并记录。详细建议去官网查询一、nn.Parameter类是Tensor的子类。唯一区别:在和Module一起使用时。当parameter赋值给module的属性时,会自动将parameter加入到模型的参数列表中。而tensor不会。二、nn.Module是一个python容器。是所有神经网络模块的基类。...原创 2020-04-01 15:06:02 · 4360 阅读 · 0 评论 -
Pytorch各种取样器sample
测试了pytorch的三种取样器用法。一:概念Sample:取样器是在某一个数据集合上,按照某种策略进行取样。常见的策略包括顺序取样,随机取样(个样本等概率),随机取样(赋予个样本不同的概率)。以上三个策略都有放回和不放回两种方式。TensorDataset:对多个数据列表进行简单包装。就是用一个更大的list将多个不同类型的list数据进行简单包装。代码如下:class...原创 2020-03-30 17:06:30 · 8331 阅读 · 0 评论 -
Focal loss 原理及keras实现
一、keras原理focal loss就是在cross_entropy_loss前加了权重,让模型注重于去学习更难以学习的样本,并在一定程度上解决类别不均衡问题。在理解focal loss前,一定要先透彻了解交叉熵cross entropy。1、Cross entropy交叉熵部分的内容来自博客,对交叉熵写的很详细,深入浅出。感谢该博主1)信息熵H(x)一个随机变量的信息量,直...原创 2019-06-25 20:17:10 · 8595 阅读 · 0 评论 -
keras断点训练
有时模型训练时间过长,如遇到训练异常中断或者想调整超参,需要继续上次训练而不是重头开始。这里参照tf-slim的理念实现一种keras断点训练的功能:在做fine-tune时,如果保存模型路径中没有已保存的模型参数,则从google预训练模型中恢复参数,如果保存模型路径中有已保存的模型参数(之前已经训练过),则从保存的参数恢复模型参数继续上次训练。下面先总结了模型参数初始化的几种方式(有基础的...原创 2019-06-04 17:15:34 · 3387 阅读 · 4 评论 -
keras CAM和Grad-cam原理简介与实现
一、两种类型的分类模型为了更好的解释CAM和Grad-cam,这里先介绍两种类型的分类模型。feature extraction+Flatten+softmax和feature extraction+GAP+softmax。以下均以VGG16为例(其他模型原理一样),在做完卷积激活池化操作后,每张图像特征提取可得到7x7x512大小的特征图,为了在全连接层作分类,需要将提取的特征图(三维)...原创 2019-06-18 21:54:30 · 17485 阅读 · 57 评论 -
tensorflow版本对应cuda,cudnn版本官方文档
linux下:截止2019.6.6号tensorflow版本对应的python版本,编译器版本。cuda,cudnn版本,如下windos,macos及更新的版本对应信息可直接查看官方文档原创 2019-06-06 16:15:09 · 5996 阅读 · 1 评论 -
交叉熵的深度理解
推荐博客一文搞懂交叉熵在机器学习中的使用,写的非常透彻转载 2019-06-24 16:23:18 · 261 阅读 · 0 评论 -
Deep learning多分类和多任务分类的区别及损失函数的选择
多分类模型和多任务模型(Multi-task Model)的区别在于:多分类模型:样本集包含多个类别,但是一个样本只属于一类。多任务模型:样本集包含多个类别,一个样本可以属于多个类别。一、多分类模型1、多分类模型使用交叉熵损失函数。在计算时其实就是-log(pt),对一个样本来说,pt就是该样本真实的类别,模型预测样本属于该类别的概率。例如某样本的label是[0,1,...原创 2019-07-17 21:57:43 · 7899 阅读 · 1 评论 -
深度学习数据不均衡的处理方法
在进行机器学习,深度学习任务时,经常会碰到数据不均衡的问题。如果数据严重失衡甚至会导致训练后的模型对任何样本对判别为训练数据中占比较多的一类。以下总结了再做图像任务时,处理数据不均衡问题常用的几种方法。下面分别从数据层面和优化算法层面考虑分别介绍。一、数据层面1、欠采样 对不均衡数据中样本较多的一类进行采样,使其约等于样本量较少的一类。但是,由于图像任务模型一般...原创 2019-07-25 20:02:51 · 5054 阅读 · 0 评论 -
CNN系列学习之LeNet-5
前言:CNN系列总结自己学习主流模型的笔记,从手写体的LeNet-5到VGG16再到历年的ImageNet大赛的冠军ResNet50,Inception V3,DenseNet等。重点总结每个网络的设计思想(为了解决什么问题),改进点(是怎么解决这些问题的),并使用keras的两种定义模型的方式Sequential()和Functional式模型实现一遍(加深对模型理解的同时熟悉keras的使...原创 2019-07-31 21:26:46 · 227 阅读 · 0 评论 -
CNN系列学习之VGG16
前言:CNN系列总结自己学习主流模型的笔记,从手写体的LeNet-5到VGG16再到历年的ImageNet大赛的冠军ResNet50,Inception V3,DenseNet等。重点总结每个网络的设计思想(为了解决什么问题),改进点(是怎么解决这些问题的),并使用keras的两种定义模型的方式Sequential()和Functional式模型实现一遍(加深对模型理解的同时熟悉keras的使...原创 2019-07-31 21:31:40 · 3505 阅读 · 0 评论 -
CNN为什么卷积核的大小都是奇数
CNN的卷积核大小都是奇数而没有偶数主要有以下两点原因:1、奇数卷积核有中心像素点如下图中,奇数大小的卷积核有唯一的中心像素点,而偶数大小的卷积核没有中心像素点 为什么需要中心像素点?因为中心像素点有以下两点左右:确定局部卷积后要更新的像素点位置。如下图的卷积操作,中心像素的位置对应着当前卷积操作wx+b的值要赋给那个位置。如果卷积核是偶数,中...原创 2019-08-13 21:03:07 · 4088 阅读 · 0 评论 -
在小图像数据集上使用预训练模型
在小的图像数据集进行深度学习任务,一个高效的方式是利用预先训练好的模型一 为什么预训练的模型可以用于其他任务如果用于预训练模型的数据集足够大,且足够普通,那么在此数据集上训练好的模型学习到的空间层次特征可作为通用模型使用,其学习到的特征对其他许多不同的计算机视觉任务都是有用的。深度学习的一个优点就是不同问题学习特征的可移植性。这一特征使得深度学习对于小数据集的任务也依然非常有效。二...原创 2019-08-20 17:21:06 · 3286 阅读 · 1 评论 -
keras 数据读取几种方式
keras数据读取(图像数据)的方式,可以不使用keras的方法而使用opencv或者pil直接读取做处理。这里主要总结了keras封装的几种图像数据读取方法,一、keras.preprocessing.image.load_img()读取单张图像1)load_img()指定图像路径读取图像,看源码可知就是对pil的简单封装,使用PIL.mage.open()读取def load_i...原创 2019-06-05 16:12:16 · 15487 阅读 · 2 评论 -
tf.name_scope()和tf.variable_scope() 的简介和区别
一 tf.name_scope()用于定义python op的上下文管理器;__init__( name, default_name=None, values=None)name:此scope的名字; default_name:name没有预设值时使用此默认名字 values:传递给name_scopesd 变量列表,可在上下文区域对这些变量操作 ...原创 2018-07-27 13:03:28 · 750 阅读 · 0 评论 -
pycaffe 中RGB图像通道变换问题
使用python对Caffe框架训练好的模型进行识别时发现通道转换的若干问题:要注意一点的就是:Caffe中彩色图像的通道是BGR格式,图像存储是【0,255】1.caffe.io.load_image方式image = caffe.io.load_image(image_file) #加载图片 使用caffe.io.load_image()读进来的是RGB格式和0~1(float)所以在进行识别...转载 2018-04-25 16:33:36 · 1089 阅读 · 0 评论 -
caffe绘制loss曲线
第一步:重定向,保存每次迭代的loss到log文件中$TOOLS/caffe train --solver=$SOLVERFILE 2>&1 |tee mycaffe.logmycaffe.log是自己起的文件名第二步:解析保存的log文件并在当前目录下生成mycaffe.log.train和mycaffe.log.test文件./tools/extra/parse_log.sh m...原创 2018-04-27 14:03:16 · 495 阅读 · 0 评论 -
Python 爬虫从百度抓取图片
近期想完全自己动手实现一个deep learning的多分类任务,数据集直接用Python在网页上抓取,主要用到Python模块: -- re模块(正则表达式) -- requests模块一 用到的Python模块简介 1、 re模块 正则表达式是一种强大的用于字符串匹配的工具,很多编程语言中(包括Python)都有正则表达式的概念,就是用预先定...原创 2018-06-06 22:14:51 · 1124 阅读 · 0 评论 -
Tensorflow中TFRecord数据格式
一 简介 为解决数据来源的复杂性(各数据集的数据格式各不相同),Tensorflow使用TFRecord格式来统一输入数据的格式。 TFRecord是一种将图像数据和标签放在一起的二进制文件,能更好的利用内存,在tensorflow中快速的复制,移动,读取,存储二 TFRecord文件中的数据格式是通过Proto Buffer定义的 Proto Buffer的...原创 2018-05-31 14:48:31 · 754 阅读 · 0 评论 -
Tensoeflow 中使用tf.variable_scope()和tf.get_variable()实现变量共享【精】
一 为什么要用变量共享当我们有一个非常庞大的模型的时候免不了需要进行大量的变量共享,而且有时候还希望能够在一个地方初始化所有的变量;假设定义一个图片滤波器,my_image_filter(input_image)有两个image想要使用同一组参数的同一个滤波器,可以调用该滤波器函数两次,但这样做会产生两组变量,造成资源浪费;一种变量共享的方式是:通过独立的代码来定义并使用,如可以通过外部定义字典,...原创 2018-07-10 14:57:34 · 536 阅读 · 0 评论 -
Tensorflow 变量
1、变量Tensorflow使用变量来存储并更新参数;# Create two variables.weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name="weights")biases = tf.Variable(tf.zeros([200]), name="bi...原创 2018-07-10 15:48:38 · 242 阅读 · 0 评论 -
Tensorflow 参数解析 tf.app.gfags
import tensorflow as tftf.app.flags.DEFINE_string('train_dir','~/projects','this is a train_dir')tf.app.flags.DEFINE_bool('is_traing',True,'ss')tf.app.flags.DEFINE_integer('num_epoch',200,'num')...原创 2018-07-10 17:17:46 · 264 阅读 · 0 评论 -
tf.train.MonitoredTrainingSession()解析【精】
最近看了下cifar10源码,训练代码中使用了tf.train.SessionRunHook(),tf.train.MonitoredTrainingSession();查看官方API后终于有些眉目了,特记录备忘。首先,先讲下tf.train.MonitoredTrainingSession();一.MonitoredTrainingSession()首先,tf.tra...原创 2018-07-11 20:36:35 · 21379 阅读 · 9 评论 -
tf.contrib.slim学习之variable,layer,arg_scope
TF-Slim是一个轻量级库,用于在TensorFlow中定义,训练和评估复杂模型。可自由的把tf-slim与tensorflow或其他框架组合使用;可以非常方便的使用TF-slim的variables, layers 和scopes定义复杂的网络模型。一 Variable(1) 相比tensorflow的Variable的定义,TF-slim在定义变量时增加了将变量加入正则化lo...原创 2018-07-17 23:03:23 · 1682 阅读 · 0 评论 -
Hook? tf.train.SessionRunHook()介绍【精】
最近看了下cifar10源码,训练代码中使用了tf.train.SessionRunHook(),tf.train.MonitoredTrainingSession();查看官方API后终于有些眉目了,特记录备忘。tf.train.SessionRunHook()是一个类;用来定义Hooks;Hooks是什么,官方文档中关于training hooks的定义是:Hooks are t...原创 2018-07-12 11:16:56 · 16578 阅读 · 10 评论 -
tf.contrib.slim学习之Training Models
TF-slim提供了一系列的常用损失函数和其他便捷的辅助函数去帮助执行训练和评估过程;一 Training Models(1)TF-slim定义loss函数TF-slim预定义了一些常用的损失函数,如交叉熵损失:import tensorflow as tfimport tensorflow.contrib.slim.nets as netsvgg = nets.vgg...原创 2018-07-18 22:13:55 · 2038 阅读 · 0 评论 -
tf.train.get_checkpoint_state
tf.train.get_checkpoint_state()先看下官方文档对于接口的定义了解函数的使用一 定义Args:checkpoint_dir:chechpoint文件的路径latest_filename:指定chechpoint的名字,默认是'checkpoint'Returns:如果路径有效则返回一个CheckpointState proto对象(该对象有两个可...原创 2018-07-12 22:30:24 · 6447 阅读 · 5 评论 -
tf.contrib.slim学习之微调模型fine-truning
在使用经典的网络模型(如VGG16,下文来VGG16来讲述)用于自己的任务task时,可根据自己的需求选择是否使用(VGG16)在ImageNet预训练的权重来恢复模型参数:不使用预训练的参数,自己训练全部参数;当数据量足够时,这种方法能充分发挥模型的威力,取得较高的性能; 使用预训练的权重恢复除fc8层参数之外的参数,只训练fc8一层,相当于把VGG16模型当成一个特征提取器,用fc7层提...原创 2018-07-19 09:57:56 · 1357 阅读 · 3 评论 -
tf.contrib.slim学习之Evaluation Model
当训练完一个模型,或者模型正在训练时,我们想要评估模型在实际应用的表现,可通过两个部分来实现模型评估定义评估标准(度量模型性能的指标)(如Accuracy,Recall_5) 评估代码用于读取数据,执行inference,计算对应于GT的分数,并保存评估的分数一 Metric(1)metrics:用于定义评估模型性能的标准,如F1分数,IOU;TF-slim提供了一系列的度量操作m...原创 2018-07-19 12:19:43 · 1674 阅读 · 0 评论 -
tensorflow tf.Variable()和tf.get_variable()详解
一、tf.Variable()(1)参数说明tf.Variable是一个Variable类。通过变量维持图graph的状态,以便在sess.run()中执行;可以用Variable类创建一个实例在图中增加变量;Args参数说明:initial_value:Tensor或可转换为Tensor的Python对象,它是Variable的初始值。除非validate_shape设置为Fal...原创 2018-07-26 22:29:53 · 57301 阅读 · 2 评论 -
data augmentation
data augmentation 几种方法总结在深度学习中,有的时候训练集不够多,或者某一类数据较少,或者为了防止过拟合,让模型更加鲁棒性,data augmentation是一个不错的选择。常见方法Color Jittering:对颜色的数据增强:图像亮度、饱和度、对比度变化(此处对色彩抖动的理解不知是否得当);PCA Jittering:首先按照RGB三个颜色通道计算均值和标准差,再在整个训...转载 2018-04-25 16:26:40 · 467 阅读 · 0 评论