在训练了 50 个 epoch 之后,本文作者惊讶地发现模型什么都没学到,于是开始深挖背后的问题,并最终从恺明大神论文中得到的知识解决了问题. 上个星期我做了一些实验,用了在 CIFAR10 数据集上训练的 VGG16.我需要从零开始训练模型,所以没有使用在 ImageNet 上预训练的版本. 我开始了 50 个 epoch 的训练,然后去喝了个咖啡,回来就看到了这些学习曲线: 模型什么都没学到! 我见过网络收敛得极其缓慢.振荡.过拟合.发散,但这是我第一次发现这种行为--模型根本就没有起任何作…
[知乎作答]·关于在Keras中多标签分类器训练准确率问题 本文来自知乎问题 关于在CNN中文本预测sigmoid分类器训练准确率的问题?中笔者的作答,来作为Keras中多标签分类器的使用解析教程. 一.问题描述 关于在CNN中文本预测sigmoid分类器训练准确率的问题? 对于文本多标签多分类问题,目标标签形如[ 0 0 1 0 0 1 0 1 0 1 ].在CNN中,sigmoid分类器训练.测试的准确率的判断标准是预测准确其中一个标签即为预测准确还是怎样.如何使sigmoid分类器的准确率…
作者|Praneet Bomma 编译|VK 来源|https://towardsdatascience.com/visualising-lstm-activations-in-keras-b50206da96ff 你是否想知道LSTM层学到了什么?有没有想过是否有可能看到每个单元如何对最终输出做出贡献.我很好奇,试图将其可视化.在满足我好奇的神经元的同时,我偶然发现了Andrej Karpathy的博客,名为"循环神经网络的不合理有效性".如果你想获得更深入的解释,建议你浏览他的博客…
  学习率是一个控制每次更新模型权重时响应估计误差而调整模型程度的超参数.学习率选取是一项具有挑战性的工作,学习率设置的非常小可能导致训练过程过长甚至训练进程被卡住,而设置的非常大可能会导致过快学习到次优的权重集合或者训练过程不稳定. 迁移学习 我们使用迁移学习将训练好的机器学习模型应用于不同但相关的任务中.这在深度学习这种使用层级链接的神经网络中非常有效.特别是在计算机视觉任务中,这些网络中的前几层倾向于学习较简单的特征.例如:边缘.梯度特征等. 这是一种在计算机视觉任务中被证实过可以产生更好…
keras提供了VGG19在ImageNet上的预训练权重模型文件,其他可用的模型还有VGG16.Xception.ResNet50.InceptionV3 4个. VGG19在keras中的定义: def VGG19(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000) include_top: 是否包含最后的3个全连接层 weights: 定…
深度学习的优化算法,说白了就是梯度下降.每次的参数更新有两种方式. 一. 第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度.这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent,批梯度下降. 二. 另一种,每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent.这个方法速度比较快,但是收敛性能不太好,可能…
tensorflow中的模型常常是protobuf格式,这种格式既可以是二进制也可以是文本.keras模型保存和加载与tensorflow不同,keras中的模型保存和加载往往是保存成hdf5格式. keras的模型保存分为多种情况. 一.不保存模型只显示大概结构 model.summary() 这个函数会打印模型结构,但是仅仅是打印到控制台. keras.utils.plot_model() 使用graphviz中的dot.exe生成网络结构拓扑图 二.保存模型结构 keras.models.…
用keras搭好模型架构之后的下一步,就是执行编译操作.在编译时,经常需要指定三个参数 loss optimizer metrics 这三个参数有两类选择: 使用字符串 使用标识符,如keras.losses,keras.optimizers,metrics包下面的函数 例如: sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) model.compile(loss='categorical_crossentropy', opt…
在使用RNN based model处理序列的应用中,如果使用并行运算batch sample,我们几乎一定会遇到变长序列的问题. 通常解决变长的方法主要是将过长的序列截断,将过短序列用0补齐到一个固定长度(例如max_length). 最后由n个sample组成的dataset能形成一个shape == (n, max_length)的矩阵.然后可以将这个矩阵传递到后续的模型中使用. 然而我们可以很明显,如果用0或者其他整数补齐,势必会影响到模型自身(莫名其妙被输入很多个0,显然是有问题的).…
在深度学习中,数据短缺是我们经常面临的一个问题,虽然现在有不少公开数据集,但跟大公司掌握的海量数据集相比,数量上仍然偏少,而某些特定领域的数据采集更是非常困难.根据之前的学习可知,数据量少带来的最直接影响就是过拟合.那有没有办法在现有少量数据基础上,降低或解决过拟合问题呢? 答案是有的,就是数据增强技术.我们可以对现有的数据,如图片数据进行平移.翻转.旋转.缩放.亮度增强等操作,以生成新的图片来参与训练或测试.这种操作可以将图片数量提升数倍,由此大大降低了过拟合的可能.本文将详解图像增强技术在K…