深度学习入门
文章平均质量分 65
Answerlzd
本博客作为个人的学习笔记,转载时已进行注明,若擅自转载了前辈博客,还请联系本人进行删除。
展开
-
多分类 交叉熵 纯python实现
之前只知道二分类交叉熵的公式,或者调包实现过,从来没用纯python实现过。正好有个机会需要写这么一个函数,特此记录一下。问题:给定一个logits输出x, 和真实的标签y要求计算其交叉熵首先要计算x的概率,用python实现softmax 然后找到标签对应的概率话不多说直接上代码:import mathdef softmax(x): m, n = len(x), len(x[0]) for i in range(m): cur_m = max(x[i])原创 2021-07-01 22:27:41 · 2288 阅读 · 0 评论 -
pytorch 更新部分参数(冻结参数)注意事项
实验的pytorch版本1.2.0在训练过程中可能需要固定一部分模型的参数,只更新另一部分参数。有两种思路实现这个目标,一个是设置不要更新参数的网络层为false,另一个就是在定义优化器时只传入要更新的参数。当然最优的做法是,优化器中只传入requires_grad=True的参数,这样占用的内存会更小一点,效率也会更高。一、设置参数为falseimport torchimport torch.nn as nnimport torch.optim as optim# 定义一个简单的网络原创 2020-09-09 17:24:59 · 24600 阅读 · 11 评论 -
linux虚拟环境安装tensorflow1.0.0-gpu
为了跑一个tensorflow的程序,需要安装1.0版本的tensorflow。然后就要安装cuda8.0、cudnn5.0和python3.6。因为其他版本的老是报错。我已经安装好cuda8.0和cudnn5.0,所以你们可以直接下载下来(链接:),然后放在一个目录下,再修改下.bashrc就可以了。具体要放哪个目录,怎么修改.bashrc下面都会提到。1.首先创建一个虚拟环境conda create -n tf1.0 python=3.62.进入这个环境source activ原创 2020-08-01 10:04:02 · 1306 阅读 · 0 评论 -
VQ-VAE量子化自编码器介绍
VQ-VAE中一个很大的创新就是对离散的值进行求梯度,称为Straight-Through Estimator。具体参考:https://spaces.ac.cn/archives/6760转载 2020-05-02 14:32:59 · 1676 阅读 · 0 评论 -
pytorch固定参数-模型的pretrain和fine-tune
ValueError: loaded state dict contains a parameter group that doesn't match the size of optimizer's group原创 2020-03-15 10:52:03 · 5251 阅读 · 1 评论 -
pycharm调试带参数命令行程序
背景:本来用命令行执行程序时是这样的,但是运行之后直接出最终的结果。无法查看程序在每一步到底是怎样执行的,为此有:解决办法:1. 打开Run->Edit Configurations2. 将参数填进去,注意只填参数,命令行执行时的python就不用填了。3.OK,就可以打断点进行调试了。...原创 2019-12-09 16:50:13 · 7609 阅读 · 2 评论 -
pytorch自动编码器实现有损图像压缩
自动编码器(AutoEncoder)由编码器(Encoder)和解码器(Decoder)两部分组成。编码器和解码器可以是任意模型,通常神经网络模型作为编码器和解码器。自动编码器作为一种数据压缩的方法,其原理是:输入数据经过编码器变成一个编码(code),然后将这个编码作为解码器的输入,观察解码器的输出是否能还原原始数据,因此将解码器的输出和原始数据的误差作为最优化的目标。下面以MNIST数...原创 2019-08-16 23:32:39 · 3619 阅读 · 4 评论 -
如何用二分类学习器解决多分类问题
使用二分类学习器解决多分类问题的基本思路是“拆解法”,也就是将多分类任务拆分成多个二分类任务求解。这里主要介绍如何对多分类任务进行拆分,以及对拆分的多个分类器进行集成。主要有三种拆分策略:“一对一”(One vs One,简称OvO)、“一对其余”(One vs Rest,简称OvR)和“多对多”(Many vs Many,简称MvM).一、“一对一”(OvO)假设要对N个类别进行分类...原创 2019-08-11 19:32:15 · 6605 阅读 · 0 评论 -
pytorch利用多个GPU并行计算
参考:https://pytorch.org/docs/stable/nn.htmlhttps://github.com/apachecn/pytorch-doc-zh/blob/master/docs/1.0/blitz_data_parallel_tutorial.md一、 torch.nn.DataParalleltorch.nn.DataParallel(module,d...原创 2019-08-09 21:33:21 · 10500 阅读 · 1 评论 -
pytorch1.0 实现多个层权重共享
1、在模型前向传播时,可以多次重用同一个模块实现权重共享。2、用python循环语句或条件语句在每个前向传播时构建一个动态计算图,所以下面这个模型是一个动态网络(动态控制流程)import torchimport torch.nn as nnimport randomimport matplotlib.pyplot as plt# 绘制loss曲线def plot_curve...原创 2019-08-08 11:35:26 · 6842 阅读 · 9 评论 -
神经网络中权重的初始值如何设定?
在神经网络的学习中,权重的初始值特别重要。实际上,设定什么样的权重初始值,经常关系到神经网络的学习能否成功。本文将介绍在Sigmod、tanh和Relu激活函数下权重初始值的推荐值。原创 2019-07-16 11:25:34 · 8982 阅读 · 0 评论 -
神经网络如何选择合适的超参数(hyper-parameter)
神经网络中,除了寻找最优的权重和偏置等参数,设定合适的超参数也同样重要。比如各层神经元的数量、batch_size的取值、参数更新时的学习率、权值衰减系数或学习的epoch等。超参数寻找过程一般会伴随很多试错,所以用尽可能高效的方法找到超参数非常重要。下面介绍一种实践性的方法,说实话是有一些实践者经验的感觉。步骤0设定超参数的范围。说明:超参数的范围只要“大致的指定”就可以...原创 2019-07-10 14:54:30 · 3876 阅读 · 3 评论 -
简单神经网络的搭建和梯度下降法训练
一、用numpy实现两层神经网络一个全连接的RELU神经网络,一个隐藏层,为了简单起见不用bais。作用是从x预测y。Loss 函数为: 假设输入为x,所以第一层的输出为,然后经过RELU激活函数,得到的结果为h_relu。当时不太清楚为什么要用激活函数,查了一下感觉这篇博客讲的挺好。链接:https://www.c...原创 2019-04-24 10:54:45 · 473 阅读 · 0 评论 -
多层全连接神经网络实现MNIST手写数字分类
mnist 数据集是一个非常出名的数据集,基本上很多网络都将其作为一个测试的标准,其来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST)。 训练集 (training set) 由来自 250 个不同人手写的数字构成, 其中 50% 是高中学生, 50% 来自人口普查局 (the Census Bureau) 的...原创 2019-05-06 18:22:25 · 2379 阅读 · 2 评论 -
PyTorch1.0搭建卷积神经网络实现MNIST手写数字识别
还是把所有代码放在三个.py文件里:net.py用来定义卷积网络 readpic.py用来读取自己手动画的一张图片,测试着玩 CNN.py就是代码的主体部分net.py这里使用的是LeNet,LeNet是整个神经网络的开山之作,1998年由LeCun提出,它的结构特别简单。import torchimport torch.nn as nnclass LeNet(nn....原创 2019-05-18 13:47:40 · 671 阅读 · 0 评论 -
PyTorch搭建N-gram模型实现单词预测
N-gram模型就是假设预测这个单词只与前面的N-1个单词有关,并不是和前面所有的词都有关系。所以,对于1-gram(每个词都是独立分布的):P(w1, w2, w3, … , wn) = P(w1)P(w2|w1)P(w3|w1w2)P(w4|w1w2w3)…P(wn|w1w2…wn-1) ≈ P(w1)P(w2...原创 2019-05-29 15:25:42 · 2862 阅读 · 14 评论 -
深度学习中梯度及梯度法
梯度 简单来说,例如有像这样的全部由变量的偏导数组成的向量称为梯度(gradient)。实际上,梯度会指向各点处的函数值降低的方向。更严格的讲,梯度指示的方向是各点处的函数值减少最多的方向。为什么这么说,因为方向导数=cos()×梯度,而是方向导数的方向和梯度方向的夹角。所以,所有的下降方向中,梯度方向下降的最多。 梯度法 神经网络的主要任务是在学习时找...原创 2019-06-08 20:04:10 · 9614 阅读 · 9 评论 -
经典损失函数——均方误差(MSE)和交叉熵误差(CEE)的python实现
损失函数(loss function)用来表示当前的神经网络对训练数据不拟合的程度。这个损失函数有很多,但是一般使用均方误差和交叉熵误差等。1.均方误差(mean squared error)先来看一下表达式: 用于将的求导结果变成,是神经网络的输出,是训练数据的标签值,k表示数据的维度。用python实现:def MS...原创 2019-06-19 11:28:04 · 13991 阅读 · 6 评论 -
神经网络之softmax函数
1.什么是softmax函数:首先给出softmax函数的公式: 这个式子表示假设输出层共有n个神经元,计算第k个神经元的输出。softmax函数的分子是输出层输入信号的指数函数,分母是所有输入信号的指数函数的和。"soft" because still assigns some probability to smalles...原创 2019-06-15 11:43:49 · 8022 阅读 · 0 评论 -
神经网络参数最优化的方法(SGD、Momentum、AdaGrad、Adam)
神经网络的学习的目的就是找到合适的参数使损失函数的值尽可能的小。这种寻找最优参数的过程就叫做最优化(optimization)。然而在深度神经网络中,参数的数量非常庞大,导致最优化的问题非常复杂。下面介绍四种常见的最优化的方法,并通过一个例子进行比较。1. SGD(stochastic gradient descent)SGD即随机梯度下降法,这个方法通过梯度下降法更新参数,不过因为这里使...原创 2019-06-25 21:13:22 · 5500 阅读 · 2 评论 -
四种抑制过拟合的方法
过拟合指的是只能拟合训练数据,但不能很好地拟合不包含训练数据的其他数据。神经网络要求模型能够具有较高的泛化能力,也就是对不包含训练数据的未观测数据也能进行正确识别。所以在训练表现力强的模型同时,抑制过拟合的技巧也很重要。防止过拟合的方法:(1)人为增加训练数据集;(2)正则化 regularization(权值衰减);(3)Dropout;(4)早停(early stopping)1、人为...原创 2019-07-02 11:02:53 · 7916 阅读 · 0 评论 -
PyTorch搭建神经网络的一般步骤
给定输入输出 定义一个模型 定义损失函数(loss function)和优化函数(optimizer) 训练一个过程一个简单的例子:import torchimport torch.nn as nnN, D_in, H, D_out = 64, 1000, 100, 10x = torch.randn(N, D_in)y = torch.randn(N, D_out)...原创 2019-04-27 14:41:21 · 874 阅读 · 0 评论