NoRM

CNN 经典网络之-ResNet

拟墨画扇 提交于 2021-02-01 11:28:33
resnet 又叫深度残差网络 图像识别准确率很高,主要作者是国人哦 深度网络的退化问题 深度网络难以训练,梯度消失,梯度爆炸,老生常谈,不多说 resnet 解决了这个问题,并且将网络深度扩展到了最多152层。怎么解决的呢? 残差学习 结构如图 在普通的卷积过程中加入了一个x的恒等映射(identity mapping) 专家把这称作 skip connections 或者 shortcut connections 残差结构的理解 为什么要这样呢?下面我从多个角度阐述这个问题。 生活角度 每学习一个模型,我都希望能用日常的生活去解释为什么模型要这样,一是加深对模型的理解,二是给自己搭建模型寻找灵感,三是给优化模型寻找灵感。 resnet 无疑是解决很难识别的问题的,那我举一个日常生活中人类也难以识别的问题,看看这个模型跟人类的识别方法是否一致。 比如人类识别杯子里的水烫不烫 一杯水,我摸了一下,烫,好,我的神经开始运转,最后形成理论杯子里的水烫,这显然不对 又一杯水,我一摸,不烫,好嘛,这咋办,认知混乱了,也就是无法得到有效的参数, 那人类是怎么办呢? 我们不止是摸一摸,而且在摸过之后还要把杯子拿起来仔细看看,有什么细节可以帮助我们更好的识别,这就是在神经经过运转后,又把x整体输入, 当然即使我们拿起杯子看半天,也可能看不出任何规律来帮助我们识别,那人类的作法是什么呢?我记住吧

Why is np.linalg.norm(x,2) slower than solving it directly?

ⅰ亾dé卋堺 提交于 2021-01-29 16:09:26
问题 Example code: import numpy as np import math import time x=np.ones((2000,2000)) start = time.time() print(np.linalg.norm(x, 2)) end = time.time() print("time 1: " + str(end - start)) start = time.time() print(math.sqrt(np.sum(x*x))) end = time.time() print("time 2: " + str(end - start)) The output (on my machine) is: 1999.999999999991 time 1: 3.216777801513672 2000.0 time 2: 0.015042781829833984 It shows that np.linalg.norm() takes more than 3s to solve it, while the direct solution takes

文本分类的一种对抗训练方法

萝らか妹 提交于 2021-01-23 05:25:36
最近阅读了有关文本分类的文章,其中有一篇名为《Adversarail Training for Semi-supervised Text Classification》, 其主要思路实在文本训练时增加了一个扰动因子,即在embedding层加入一个小的扰动,发现训练的结果比不加要好很多。 模型的网络结构如下图: 下面就介绍一下这个对抗因子r的生成过程: 在进入lstm网络前先进行从w到v的计算,即将wordembedding 归一化: 然后定义模型的损失函数,令输入为x,参数为θ,R adv 为对抗训练因子,损失函数为: 其中一个细节,虽然 θ ˆ 是θ的复制,但是它是计算扰动的过程,不会参与到计算梯度的反向传播算法中。 然后就是求扰动: 先对表达式求导得到倒数g,然后对倒数g进行l2正则化的线性变换。 至此扰动则计算完成然后加入之前的wordembedding中参与模型训练。 下面则是模型的代码部分: #构建adversarailLSTM模型 class AdversarailLSTM(object): def __init__(self, config, wordEmbedding, indexFreqs): #定义输入 self.inputX = tf.placeholder(tf.int32, [None, config.sequenceLength], name=

Java多线程学习(吐血超详细总结)

↘锁芯ラ 提交于 2021-01-13 19:01:50
林炳文Evankaka 原创作品。转载请注明出处 http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢?如果你觉得此文很简单,那推荐你看看Java并发包的的线程池( Java并发编程与技术内幕:线程池深入理解 ),或者看这个专栏: Java并发编程与技术内幕 。你将会对Java里头的高并发场景下的线程有更加深刻的理解。 目录 (?) [-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。在这之前,首先让我们来了解下在操作系统中进程和线程的区别:   进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程。(进程是资源分配的最小单位)   线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是cpu调度的最小单位)  

Java多线程看这一篇就足够了(吐血超详细总结)

故事扮演 提交于 2021-01-13 18:48:06
进程与线程 进程是程序的一次动态执行过程,它需要经历从代码加载,代码执行到执行完毕的一个完整的过程,这个过程也是进程本身从产生,发展到最终消亡的过程。多进程操作系统能同时达运行多个进程(程序),由于 CPU 具备分时机制,所以每个进程都能循环获得自己的CPU 时间片。由于 CPU 执行速度非常快,使得所有程序好像是在同时运行一样。 多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。线程是比进程更小的执行单位,线程是进程的基础之上进行进一步的划分。所谓多线程是指一个进程在执行过程中可以产生多个更小的程序单元,这些更小的单元称为线程,这些线程可以同时存在,同时运行,一个进程可能包含多个同时执行的线程。进程与线程的区别如图所示: Java中线程实现的方式 在 Java 中实现多线程有两种手段,一种是继承 Thread 类,另一种就是实现 Runnable 接口。下面我们就分别来介绍这两种方式的使用。 实现 Runnable 接口 1 package ljz; 2 class MyThread implements Runnable{ // 实现Runnable接口,作为线程的实现类 3 private String name ; // 表示线程的名称 4 public MyThread(String name){ 5 this .name = name ;

Java多线程入门2

三世轮回 提交于 2021-01-13 00:33:35
线程死锁简单示例 package second.study; public class Test { public static void main(String[] args) { Thread thread1 = new Thread( new DeadLock( true )); Thread thread2 = new Thread( new DeadLock( false )); thread1.start(); thread2.start(); } } class DeadLock implements Runnable { private boolean flag; DeadLock( boolean flag) { this .flag = flag; } @Override public void run() { if (flag) { while ( true ) { synchronized (Lock.obj1) { System.out.println( "if Lock1" ); synchronized (Lock.obj2) { System.out.println( "if Lock2" ); } } } } else { while ( true ) { synchronized (Lock.obj2) { System.out.println(

[NLP]Transformer模型解析

一笑奈何 提交于 2021-01-08 06:31:44
简介 [2] Attention Is All You Need 是 2017 年 google 提出来的一篇论文,论文里提出了一个新的模型,叫 Transformer ,这个结构广泛应用于 NLP 各大领域,是目前比较流行的模型。该模型没有选择大热的 RNN/LSTM/GRU 的结构,而是只使用 attention layer 和全连接层就达到了较好的效果,同时解决了 RNN/LSTM/GRU 中的 long dependency problem, 以及传统 RNN 训练并行度以及计算复杂度高的问题。缺点是输入固定长度的序列,需要对原始文本进行裁剪和填充,导致不能学习到序列中更长距离的依赖关系。 Transformer 总体结构 [1] Transformer 采用 Encoder-Decoder 架构。 上图就是论文中提出的 Transformer 结构。其中左半部分是 encoder 右半部分是 decoder. Encoder 层中有 6 个一模一样的层结构,每个层结构包含了两个子层,第一个子层是 多头注意力层 ( Multi-Head Attention, 橙色部分),第二个子层是 前馈连接层 ( Feed Forward ,浅蓝色部分)。除此之外,还有一个残差连接,直接将 input embedding 传给第一个 Add & Norm 层(黄色部分)以及 第一个

matlab练习程序(点云表面法向量)

帅比萌擦擦* 提交于 2021-01-07 02:25:45
思路还是很容易想到的: 1.首先使用KD树寻找当前点邻域的N个点,这里取了10个,直接调用了vlfeat。 2.用最小二乘估计当前邻域点组成的平面,得到法向量。 3.根据当前邻域点平均值确定邻域质心,通常质心会在弯曲表面的内部,反方向即为法线方向。 vlfeat在这里下载 , 配置参考这里 ,rabbit.pcd 下载地址 处理效果如下: 原始点云: 点云表面法向量,做了降采样处理: 兔子果断变刺猬。 matlab代码如下: clear all; close all; clc; warning off; pc = pcread( ' rabbit.pcd ' ); pc =pcdownsample(pc, ' random ' , 0.3 ); % 0.3 倍降采样 pcshow(pc); pc_point = pc.Location ' ; %得到点云数据 kdtree = vl_kdtreebuild(pc_point); %使用vlfeat建立kdtree normE = []; for i= 1 :length(pc_point) p_cur = pc_point(:,i); [index, distance] = vl_kdtreequery(kdtree, pc_point, p_cur, ' NumNeighbors ' , 10 ); %寻找当前点最近的10个点 p

神经网络优化中的Weight Averaging

走远了吗. 提交于 2021-01-03 12:42:43
©PaperWeekly 原创 · 作者|张子逊 研究方向|神经网络剪枝、NAS 在神经网络优化的研究中,有研究改进优化器本身的(例如学习率衰减策略、一系列 Adam 改进等等),也有不少是改进 normalization 之类的技术(例如 Weight Decay、BN、GN 等等)来提高优化器的性能和稳定性。除此之外,还有一个比较常见的技术就是 Weight Averaging,也就是字面意思对网络的权重进行平均,这也是一个不错的提高优化器性能/稳定性的方式。 Stochastic Weight Averaging (SWA) 在神经网络的优化中,有一个比较公认的问题就是 train loss 和 test loss 优化曲面不一致。导致这个问题可能的原因有很多,(以下是个人推测)可能是 train 和 test 数据本身存在分布不一致的问题、也可能是因为训练的时候在 train loss 中加入了一系列正则化等等。由于这个不一致的问题,就会导致优化出来的网络 generalization performance 可能会不好。 本文提出了一个比较简单直接的方式来解决这个问题,在优化的末期取 k 个优化轨迹上的 checkpoints,平均他们的权重,得到最终的网络权重,这样就会使得最终的权重位于 flat 曲面更中心的位置。这个方法也被集成到了 PyTorch 1.6

Multi-modal Multi-label Emotion Detection with Modality and Label Dependence 阅读笔记

孤街醉人 提交于 2020-12-31 20:18:09
背景 这篇文章讲的是 多标签的情感分析 , 这篇文章是考虑多模态的情感分析, 因为是多标签 所以需要考虑不同标签的依赖性,以及每个标签对不同模态的依赖性 任务的具体例子是: 给定一个视频,包括三个模态信息 ( 视觉, 文本, 声音 )然后给出情感倾向(可以是多个) 文章指出 多标签分类比单标签分类要更加难 , 以主要挑战是如何去对标签之间的依赖性进行建模, 正如上图所说, 一个Sad 很有可能 和Disgust 是同时出现的, 但是有很小可能会出现 happy 和 sad。 论文内容 特征初步提取 Text : word embedding 用的是GLoVe, 没有句子的概念, 文本 表示为 单词数 ×单词维度 Visual : Facet 提取视觉特征, 包括 面部动作单元,面部标志,头部姿势,凝视追踪, 一共34维, 一个视频提取多个帧 Audio : COVAREP 提取声音特征 包括: 12 Mel-frequency cepstral coefficients (MFCCs), pitch, voiced/unvoiced segmenting features 问题描述 (好像EMNLP都有这个部分) 这里主要是介绍一下符号, 可以在后面模型结构中再进行解释, 但是有一点注意其优化目标 因为是一个多标签问题, 其优化目标就是, 找到一个最优 label序列 就是要最大化