![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
学习笔记
Fronzy
虚心使人进步
展开
-
ResNet和DenseNet
理论上来说,对神经网络添加新的层,充分训练之后应该更能够有效地降低误差。因为原模型解的空间只能是新模型解空间的子空间。也就是说,新模型可能会得出更优的解来拟合训练数据。但是在实践中却不是这样,添加过多的层后训练误差往往不降反升,即使利用批量归一化带来的数值稳定性训练能使训练深层模型更加容易,该问题依然存在。针对这个问题,何凯明等人提出了残差网络(ResNet)。其在2015年的Imag...原创 2019-11-05 20:17:33 · 650 阅读 · 0 评论 -
批量归一化
批量归一化(batch normalization)能够让较深的神经网络训练变得更加容易。首先来复习一下标准化的定义:对数据减去均值之后再除以标准差。标准化处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1。标准化处理输入数据使得各个特征的分布相近,往往能够训练出更加有效的模型。对于浅层模型来说,对输入数据进行标准化就已经足够了。但是对于深度网络来说,即使对输入数据标准化,...原创 2019-10-23 12:40:57 · 1193 阅读 · 1 评论 -
k折(k-fold)交叉验证
k折交叉验证是用来选择模型设计并调节超参数的。首先,我们先来看一下k折交叉验证的使用背景:我在训练模型的时候,通过已有的数据训练得出一个模型,在这里用于训练的数据称为训练集。当我们把这个模型部署到真实环境去的时候,通过真实的数据得到结果,这个时候这些真实的数据就叫做测试集。那么问题来了,我们在训练模型的时候怎么样评估模型的好坏呢?怎么样调节模型的超参数呢?答:一般我们都是将训练用的...原创 2019-10-20 11:12:15 · 2024 阅读 · 0 评论 -
GoogLeNet
在2014年的ImageNet图像识别挑战赛中,GeogLeNet大放异彩。GeogLeNet在名字上向LeNet致敬,其吸收了NiN中网络串联网络的思想,并在此基础上进行了改进,变成了一个串联与并联都有的网络。Inception块Inception块是GeogLeNet中的基础卷积块,其名字来自于同名电影《盗梦空间》(Inception)。其包括4条并行的线路。用于抽取不同空间尺度下...原创 2019-10-15 19:56:31 · 187 阅读 · 0 评论 -
NiN
NiN——Network in NetworkLeNet、AlexNet和VGG设计上的共同之处是:先由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果。而AlexNet和VGG对LeNet的改进在于如何对这两个模块进行加宽(增加通道数)和加深。而NiN提供了另外一个思路:串联多个卷积层和“全连接”层构成的小网络来构建一个深层网络。这里的全连接层是有引号的,因为...原创 2019-10-13 16:21:10 · 297 阅读 · 0 评论 -
VGG网络
VGG这个名字来源于论文作者所在的实验室Visual Geometry Group。其提出了可以通过重复使用简单的基础块来构建深度模型的思路。VGG块(VGG-block)的结构:1.单层或者多层的卷积层2.单层池化层import d2lzh as d2lfrom mxnet import gluon, init, ndfrom mxnet.gluon import nn...原创 2019-10-12 14:32:09 · 1053 阅读 · 0 评论 -
AlexNet
传统的机器学习,自行设计特征提取函数,对图像的特征进行提取,再以特征作为输入,训练模型。这样导致了使用较干净的数据集和较有效的特征有时甚至比机器学习的模型的选择对分类结果的影响更大。而现在使用的深度学习,则省去了设计特征提取函数这一步骤,图像直接作为输入,训练模型。在训练模型的过程中,卷积层相当于是一个特征提取函数,多层卷积提取的是图像的高维特征,而卷积层的参数也是通过训练学习而来的。这一...原创 2019-10-12 14:07:57 · 237 阅读 · 2 评论 -
正向传播与反向传播(forward-propagation & back-propagation)
正向传播(forward-propagation):指对神经网络沿着输入层到输出层的顺序,依次计算并存储模型的中间变量。反向传播(back-propagation):沿着从输出层到输入层的顺序,依据链式法则,依次计算并存储目标函数有关神经网络各层的中间变量以及参数的梯度。反向传播是一种计算神经网络参数梯度的方法对于输入或输出X,Y,Z为任意形状张量的函数和通过链式法则,则有:...原创 2019-09-24 22:18:02 · 8228 阅读 · 0 评论 -
数值稳定性和模型初始化
数值稳定性:衰减(vanishing)和爆炸(explosion)假设一个网络的第 层的输出为。此时,如果层数 较大,则可能会出现数值衰减和爆炸。举例:假设输入和所有层的权重参数都是标量,如果权重参数为0.2和5,那么第30层的输出为(衰减)和(爆炸)。类似,当层数较多时,梯度的计算也更容易出现衰减或者爆炸。随机初始化模型参数:为什么神经网络在训练前要随机初始化参数?能...原创 2019-09-24 23:31:23 · 207 阅读 · 0 评论 -
MXNet模型构造
基于Block类的模型构造:回顾一下之前我们是怎么使用MXNet进行模型构造的?from mxnet import ndfrom mxnet.gluon import nnx = nd.random.uniform(shape=(10,10)net = nn.Sequential()net.add(nn.Dense(10, activation='relu')net.init...原创 2019-09-26 22:01:22 · 657 阅读 · 0 评论 -
MXNet模型参数的访问、初始化和共享
模型参数的访问:# 通过net后面括号内的索引访问哪一层net[0].params, type(net[0].params)# 两种方法得到相应层的信息,一般使用后者,因为前者需要输入层的名称(权重和偏差)net[0].params['dense0_weight'], net[0].weight# 层包括了data和grad,即权重和梯度net[0].weight.data()n...原创 2019-09-28 09:11:01 · 1985 阅读 · 0 评论 -
MXNet模型参数的延后初始化
模型的延后初始化先看下面这段代码:from mxnet import init, ndfrom mxnet.gluon import nnclass MyInit(init.Initializer): def _init_weight(self, name, data): print('Init', name, data.shape) # 实...原创 2019-09-28 15:23:40 · 454 阅读 · 0 评论 -
MXNet自定义层
1.不含模型参数的自定义层from mxnet import gluon, ndfrom mxnet.gluon import nnclass CenteredLayer(nn.Block): # 自定义层 def __init__(self, **kwargs): super(CenteredLayer, self).__init__(**kwargs...原创 2019-09-28 22:10:39 · 337 阅读 · 0 评论 -
MXNet模型参数的存储与读取
1.读写NDArray通过 nd.save(’filename‘,ndType) 和nd.load(’filename‘,ndType) 存储和读取from mxnet import ndfrom mxnet.gluon import nnx = nd.ones(3)nd.save('x', x)x2 = nd.load('x')x2 # 得到的x2是一个二维数组,而x是一...原创 2019-09-28 23:38:16 · 1017 阅读 · 0 评论 -
MXNet使用GPU计算
GPU上的存储在MXNet中,mx.cpu()代表所有的物理CPU和内存,而mx.gpu()只代表一块GPU和相应的显存。(cpu对应内存,gpu对应显存)可以通过NDArray的context属性来查看该NDArray所在的设备。x.context我们可以通过多种方法创建NDArray到GPU的显存上。a = nd.array([1,2,3], ctx=mx.gpu())...原创 2019-09-30 20:34:14 · 4078 阅读 · 0 评论 -
卷积神经网络中的概念
卷积神经网络(convolutional neural network),顾名思义,就是含有卷积层(convolutional layer)的神经网络。但是卷积神经网络带来不仅仅只有卷积层,填充、步幅,以及池化层的操作,这些都是卷积神经网络基础中的基础。要好好掌握呀(╯▔皿▔)╯掀桌,感觉这些概念学了不止一次了,噗,菜是原罪一、二维卷积层卷积(convolution)运算其实就是将卷积核数...原创 2019-10-10 23:45:30 · 439 阅读 · 0 评论 -
LeNet
LeNet名字来源于该论文的第一作者Yann LeCun。该网络是一个简单的卷积神经网络,其通过梯度下降训练卷积神经网络,将手写数字识别的准确性达到了一个突破性的高度。虽然简单,但却是一个奠基性的成果,卷积神经网络此时第一次被推上舞台,为世人所知。从零到一的突破总是最困难的。LeNet模型分成两个部分:卷积层块和全连接层块。1.卷积层块:包含卷积层和最大池化层。卷积层用来识别图像里的空...原创 2019-10-11 14:57:34 · 804 阅读 · 0 评论 -
模型选择、欠拟合和过拟合
训练误差(training error):模型在训练数据集上表现出的误差。泛化误差(generalization error):模型在任意一个测试数据样本上表现出的误差的期望,常常通过测试数据集上的误差来近似。机器学习模型应该关注泛化误差。模型选择(model selection)1. 验证数据集(validation set):预留一部分在训练数据集和测试数据集以外的数据进行模型...原创 2019-09-22 11:59:45 · 593 阅读 · 0 评论 -
softmax回归和多层感知机的简洁实现
softmax回归import d2lzh as d2lfrom mxnet import gluon, initfrom mxnet.gluon import loss as gloss, nn# 读取数据集batch_size = 256train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)# 定义和...原创 2019-09-21 15:28:15 · 403 阅读 · 0 评论 -
激活函数
多层感知机在单层神经网络的基础上引入了一到多个隐藏层(hidden layer)。多层感知机的全连接层和隐藏层都是全连接层。激活函数:为什么要引入激活函数?答:多层感知机的全连接层只是对数据做仿射变换(affine transformation),即线性变换,而多个仿射变换的叠加依然是一个仿射变换,也就是说多层神经网络也就相当于一层。解决这个问题的办法就是在全连接层之间引入非线性变换,即激...原创 2019-09-19 23:44:53 · 210 阅读 · 0 评论 -
Git与GitHub的使用
最近在学Git,参考博客:https://www.cnblogs.com/schaepher/p/5561193.htmlGit不小心使用git commit进入了编辑界面怎么退出:https://blog.csdn.net/weixin_38178584/article/details/81170272...原创 2019-08-24 11:26:45 · 94 阅读 · 0 评论 -
TensorFlow(1) 张量的使用
TensorFlow的张量:简单来说就是标量,向量,矩阵以及维度更高的矩阵import tensorflow as tf#定义常量ts_c = tf.constant(2, name='ts_c')#定义变量ts_x = tf.Variable(ts_c+5, name='ts_x')#一维张量ts_X = tf.Variable([0.4,0.2,0.4])#二维张量ts_...原创 2019-08-31 17:40:03 · 202 阅读 · 0 评论 -
TensorFlow(2) 使用TF构建多层感知机预测MNIST数据集
import tensorflow as tfimport tensorflow.examples.tutorials.mnist.input_data as input_dataimport matplotlib.pyplot as plt#读入数据---------------------------------------------------------------------...原创 2019-09-01 13:07:43 · 224 阅读 · 0 评论 -
TensorFlow(3) 使用卷积神经网络识别MNIST手写数字集
import tensorflow as tfimport tensorflow.examples.tutorials.mnist.input_data as input_datamnist = input_data.read_data_sets('MNIST_data/',one_hot = True)#分配权重 truncated_normal为-产生不超过两倍标准差的值-的正太分布...原创 2019-09-04 22:49:31 · 216 阅读 · 0 评论 -
安装TensorFlow GPU版本-防坑指南
安装tensorflow要安装CUDA和cuDNN,前者是GPU的通用计算架构包,也就是我们广义上理解的驱动,后者是GPU的深度学习库,能够为深度学习提供诸如卷积、池化和激活层等。网络上有许多安装CUDA和cuDNN的教程,大多数都是先下载CUDA和cuDNN,然后再进行tensorflow-gpu的安装。但是我还是建议先不要下载CUDA和cuDNN的包,为什么呢?因为你下载的CUDA...原创 2019-09-07 10:17:41 · 1393 阅读 · 0 评论 -
给自己一个小总结(废话)
这个星期把TensorFlow+Keras深度学习人工智能实践这本书刷完了,感觉还是有代码刷起来会有成就感。怎么说呢,今天和学弟探讨了一下未来的路应该怎么走,我想了一下,觉得还是继续当个程序员or工程师吧,一方面我喜欢坐在电脑前敲键盘的声音(尤其是巴拉巴拉敲得很快的那种),另一方,感觉自己认识的牛逼的人全部都在做这个东西,所以说也是因为环境问题吧。看着他们感觉自己确实有很多很多的不足,一是方向的把...原创 2019-09-07 23:27:10 · 194 阅读 · 0 评论 -
mxnet预备知识之ndarray(1)
数据操作参考资料:李沐-深度学习第二章-2.2from mxnet import nd#创建向量x = nd.arange(12)x.shapex.size#改变形状X = x.reshape((3,4))nd.zeros((2,3,4))nd.ones((3,4))#创建数组Y = nd.array([[2,1,4,3],[1,2,3,4],[4,3,2,1]...原创 2019-09-08 19:12:59 · 197 阅读 · 0 评论 -
mxnet预备知识之ndarray(2)自动求梯度
自动求梯度参考资料,李牧-深度学习-2.3from mxnet import autograd, nd# 创建向量并将其改为(4,1)的形状x = nd.arange(4).reshape((4,1))# reshape(-1,1)中的-1代表自动适应形状x = nd.arange(4).reshape((-1,1))# 这里记录求x的梯度,申请存储梯度的内存x.atta...原创 2019-09-08 23:00:33 · 645 阅读 · 0 评论 -
mxnet预备知识之ndarray(3)查阅文档
学习一个框架最好的方法就是看文档,当然不用所有的函数都看,需要用什么就查。孤陋寡闻的我现在才知道python居然自带了help这个命令。from mxnet import nd#通过dir打印模块里的所有函数print(dir(nd.random))#通过help查阅特定函数的用法help(nd.ones_like)MXNet文档链接https://mxnet.apa...原创 2019-09-08 23:05:22 · 125 阅读 · 0 评论 -
线性回归(1)基本要素
线性回归模型可以说是机器学习里面第一个学的模型了,理解了这个过程,那么机器学习的一般过程也就很明白了。线性回归的模型如下:架设房价为y,房屋面积为x1,房龄为x2。我们收集一系列的这些数据,用于训练这个模型。一栋房屋被称为一个样本,真实价格y称为标签(label),用来预测的两个因素x1,x2称为特征(feature)预测表达式为:损失函数:用于测量预测值与真实值的误差 ...原创 2019-09-10 00:22:10 · 364 阅读 · 0 评论 -
线性回归(2)从零开始实现
from mxnet import ndfrom time import timea = nd.ones(shape=1000)b = nd.ones(shape=1000)start = time()c = nd.zeros(shape=1000)for i in range(1000): c[i] = a[i]+b[i]time() - startstart =...原创 2019-09-10 23:55:58 · 365 阅读 · 0 评论 -
线性回归(3)线性回归的简洁实现
一个小练习:线性回归的模型:y=x1W1+x2W2+b线性回归可以表示成一个单层的神经网络:输入层个数为2,输出层个数为1,由于输入层并不涉及计算,依照惯例,将输出层作为神经网络层数,故其层数为1使用MXNet框架自带的包可以很容易地实现神经网络。生成数据集:2个特征,1000例的数据集from mxnet import autograd, nd#生成数据集num_inpu...原创 2019-09-12 17:26:36 · 313 阅读 · 0 评论 -
conda创建虚拟环境及相关操作
参考https://blog.csdn.net/a493823882/article/details/87888509对内容进行了一些编辑。1、conda常用的命令。 1)conda env list或conda info -e查看当前存在哪些虚拟环境 2)conda list查看安装了哪些包。 3)conda update conda检查更新当前co...原创 2019-09-14 14:18:57 · 701 阅读 · 0 评论 -
softmax回归和交叉熵损失函数
softmax回归相对于线性回归输出单元从一个变成了多个,适合用来解决分类问题。且引入了softmax运算使得输出更适合离散值的预测和训练。交叉熵损失函数对比平方损失函数其没有那么严格,其只关注对正确类别的预测概率。1.softmax假定有4个特征,3个用于分类的类别,则有如下的12个权重,3个输出:为什么要用softmax?直接用上面的公式得到的的值(值域)大小不...原创 2019-09-15 00:17:09 · 1289 阅读 · 0 评论 -
softmax回归的从零实现
# softmax回归的从零开始%matplotlib inlineimport d2lzh as d2lfrom mxnet import autograd, nd# 定义迭代器batch_size = 256train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)# 定义输出与输入大小num_input...原创 2019-09-16 11:48:02 · 538 阅读 · 0 评论 -
线性代数复习
本科时候学的线性代数里面的一些知识已经记不太清楚了,正好借着Ian的《深度学习》再复习一遍。另外再深化一下学线代的意义,当时本科学着完全不知道有什么用hhh。1. 标量、向量、矩阵和张量标量(scalar):一个标量就是一个单独的数。通常用斜体表示。向量(vector):一个向量是一列数。通常用粗体的小写变量名称表示。矩阵(matrix):矩阵是一个二维数组。通常用粗体的大写变...原创 2019-09-18 13:24:58 · 390 阅读 · 0 评论 -
操作系统学习笔记(四)Device Management
Device Management继续学习电子科技大学蒲晓蓉老师的操作系统,课程能在中国大学MOOC网站上找到。以下为记的笔记。I/O设备管理概述Learning objectives:计算机I/O子系统的组成 OS设备管理模块的结构 I/O缓冲技术 磁盘调度策略 RAID技术Techniques for Performing I/O:- Programmed I/O...原创 2019-08-18 18:07:07 · 1494 阅读 · 0 评论