提交 a1d8c08c 编写于 作者: W wizardforcel

dl6 fix

上级 cd6b49c1
......@@ -681,7 +681,7 @@ Softmax不喜欢预测多个事物。 它只想做单一选择。
* `fastai.column_data` - 允许我们使用柱状结构化数据执行Fast.ai和PyTorch。
* 对于结构化数据需要大量使用**Pandas** 。 Pandas试图用Python复制R的数据框(如果你不熟悉Pandas,这里有一本好书 - [用于数据分析的Python,第2版](http://shop.oreilly.com/product/0636920050896.do)
有很多数据预处理这个笔记本包含来自第三名获胜者( [实体嵌入分类变量](https://arxiv.org/abs/1604.06737) )的整个处理流程。 本课程不涉及数据处理,但在机器学习课程中有详细介绍,因为特征工程非常重要。
有很多数据预处理这个笔记本包含来自第三名获胜者( [实体嵌入类别变量](https://arxiv.org/abs/1604.06737) )的整个处理流程。 本课程不涉及数据处理,但在机器学习课程中有详细介绍,因为特征工程非常重要。
### 查看CSV文件
......
......@@ -159,8 +159,8 @@ Sequential(
n = len(joined); n
```
* 数字,如`Year``Month` ,虽然我们可以将它们视为连续的,但我们没有必要。 如果我们决定将`Year`作为一个分类变量,我们告诉我们的神经网络,对于`Year` (2000,2001,2002)的每个不同“级别”,你可以完全不同地对待它; 在哪里 - 如果我们说它是连续的,它必须提出某种平滑的功能来适应它们。 通常情况下,实际上是连续的但没有很多不同的级别(例如`Year``DayOfWeek` ),通常将它们视为分类更好。
* 选择分类变量和连续变量是你要做出的建模决策。 总之,如果它在数据中是分类的,则必须是分类的。 如果它在数据中是连续的,你可以选择是在模型中使其连续还是分类。
* 数字,如`Year``Month` ,虽然我们可以将它们视为连续的,但我们没有必要。 如果我们决定将`Year`作为一个类别变量,我们告诉我们的神经网络,对于`Year` (2000,2001,2002)的每个不同“级别”,你可以完全不同地对待它; 在哪里 - 如果我们说它是连续的,它必须提出某种平滑的功能来适应它们。 通常情况下,实际上是连续的但没有很多不同的级别(例如`Year``DayOfWeek` ),通常将它们视为分类更好。
* 选择类别变量和连续变量是你要做出的建模决策。 总之,如果它在数据中是分类的,则必须是分类的。 如果它在数据中是连续的,你可以选择是在模型中使其连续还是分类。
* 一般来说,浮点数难以分类,因为有很多级别(我们将级别数称为“ **基数** ” - 例如,星期几变量的基数为7)。
**问题** :你有没有对连续变量进行分类? [[31:02](https://youtu.be/gbceqO8PpBg%3Ft%3D31m2s)] Jeremy不会对变量进行分类,但我们可以做的一件事,比如最高温度,分为0-10,10-20,20-30,然后调用分类。 有趣的是,上周刚发表一篇论文,其中一组研究人员发现有时候分组可能会有所帮助。
......@@ -200,11 +200,11 @@ Sequential(
1. 拉出因变量,将其放入单独的变量中,并从原始数据框中删除它。 换句话说, `df`没有`Sales`列, `y`只包含`Sales`列。
2. `do_scale` :神经网络真的希望所有输入数据都在零左右,标准偏差大约为1.因此,我们取数据,减去均值,然后除以标准偏差即可。 它返回一个特殊对象,用于跟踪它用于该规范化的均值和标准偏差,因此你可以稍后对测试集执行相同操作( `mapper` )。
3. 它还处理缺失值 - 对于分类变量,它变为ID:0,其他类别变为1,2,3等。 对于连续变量,它用中位数替换缺失值,并创建一个新的布尔列,说明它是否丢失。
3. 它还处理缺失值 - 对于类别变量,它变为ID:0,其他类别变为1,2,3等。 对于连续变量,它用中位数替换缺失值,并创建一个新的布尔列,说明它是否丢失。
![](../img/1_Zs6ASJF8iaAe3cduCmLYKw.png)
在处理之后,2014年例如变为2,因为分类变量已经被从零开始的连续整数替换。 原因是,我们将在稍后将它们放入矩阵中,并且当它可能只是两行时,我们不希望矩阵长度为2014行。
在处理之后,2014年例如变为2,因为类别变量已经被从零开始的连续整数替换。 原因是,我们将在稍后将它们放入矩阵中,并且当它可能只是两行时,我们不希望矩阵长度为2014行。
现在我们有一个数据框,它不包含因变量,一切都是数字。 这就是我们需要深入学习的地方。 查看机器学习课程了解更多详情。 机器学习课程中涉及的另一件事是验证集。 在这种情况下,我们需要预测未来两周的销售情况,因此我们应该创建一个验证集,这是我们训练集的最后两周:
......@@ -259,7 +259,7 @@ Sequential(
### 关键新概念:嵌入 [[45:39](https://youtu.be/gbceqO8PpBg%3Ft%3D45m39s)]
我们暂时忘记分类变量:
我们暂时忘记类别变量:
![](../img/1_T604NRtHHBkBWFvWoovlUw.png)
......@@ -271,7 +271,7 @@ Sequential(
对于回归问题(不是分类),你甚至可以跳过softmax层。
### 分类变量 [[50:49](https://youtu.be/gbceqO8PpBg%3Ft%3D50m49s)]
### 类别变量 [[50:49](https://youtu.be/gbceqO8PpBg%3Ft%3D50m49s)]
我们创建一个7行的新矩阵和我们选择的列数(例如4)并用浮点数填充它。 要使用连续变量将“星期日”添加到我们的等级1张量中,我们会查看此矩阵,它将返回4个浮点数,并将它们用作“星期日”。
......@@ -291,7 +291,7 @@ Sequential(
_[('Store', 1116),_ _('DayOfWeek', 8),_ _('Year', 4),_ _('Month', 13),_ _('Day', 32),_ _('StateHoliday', 3),_ _('CompetitionMonthsOpen', 26),_ _('Promo2Weeks', 27),_ _('StoreType', 5),_ _('Assortment', 4),_ _('PromoInterval', 4),_ _('CompetitionOpenSinceYear', 24),_ _('Promo2SinceYear', 9),_ _('State', 13),_ _('Week', 53),_ _('Events', 22),_ _('Promo_fw', 7),_ _('Promo_bw', 7),_ _('StateHoliday_fw', 4),_ _('StateHoliday_bw', 4),_ _('SchoolHoliday_fw', 9),_ _('SchoolHoliday_bw', 9)]_
```
* 以下是每个分类变量及其基数的列表。
* 以下是每个类别变量及其基数的列表。
* 即使原始数据中没有缺失值,你仍然应该留出一个未知的,以防万一。
* 确定嵌入大小的经验法则是基数大小除以2,但不大于50。
......@@ -311,13 +311,13 @@ Sequential(
**问题** :有没有办法初始化嵌入矩阵除了随机? [[58:14](https://youtu.be/gbceqO8PpBg%3Ft%3D58m14s)] 我们可能会在课程的后期讨论预训练,但基本的想法是,如果罗斯曼的其他人已经训练了一个神经网络来预测奶酪销售,你也可以从他们的嵌入矩阵开始商店预测酒类销售。 例如,在Pinterest和Instacart就会发生这种情况。 Instacart使用这种技术来路由他们的购物者,Pinterest使用它来决定在网页上显示什么。 他们嵌入了在组织中共享的产品/商店矩阵,因此人们无需训练新的产品/商店。
**问题** :使用嵌入矩阵优于单热编码有什么好处? [[59:23](https://youtu.be/gbceqO8PpBg%3Ft%3D59m23s)] 对于上面一周的例子,我们可以很容易地传递7个数字(例如星期日的 [[0,1,0,0,0,0,0](https://youtu.be/gbceqO8PpBg%3Ft%3D59m23s)] ),而不是4个数字。 这也是一个浮动列表,这将完全起作用 - 这就是一般来说,分类变量多年来一直用于统计(称为“虚拟变量”)。 问题是,星期日的概念只能与单个浮点数相关联。 所以它得到了这种线性行为 - 它说周日或多或少只是一件事。 通过嵌入,星期日是四维空间的概念。 我们倾向于发现的是这些嵌入向量倾向于获得这些丰富的语义概念。 例如,如果事实证明周末有不同的行为,你往往会看到周六和周日会有更高的特定数字。
**问题** :使用嵌入矩阵优于单热编码有什么好处? [[59:23](https://youtu.be/gbceqO8PpBg%3Ft%3D59m23s)] 对于上面一周的例子,我们可以很容易地传递7个数字(例如星期日的 [[0,1,0,0,0,0,0](https://youtu.be/gbceqO8PpBg%3Ft%3D59m23s)] ),而不是4个数字。 这也是一个浮动列表,这将完全起作用 - 这就是一般来说,类别变量多年来一直用于统计(称为“虚拟变量”)。 问题是,星期日的概念只能与单个浮点数相关联。 所以它得到了这种线性行为 - 它说周日或多或少只是一件事。 通过嵌入,星期日是四维空间的概念。 我们倾向于发现的是这些嵌入向量倾向于获得这些丰富的语义概念。 例如,如果事实证明周末有不同的行为,你往往会看到周六和周日会有更高的特定数字。
> 通过具有更高的维度向量而不仅仅是单个数字,它为深度学习网络提供了学习这些丰富表示的机会。
嵌入的想法是所谓的“分布式表示” - 神经网络的最基本概念。 这就是神经网络中的概念具有很难解释的高维表示的想法。 这个向量中的这些数字甚至不必只有一个含义。 它可能意味着一件事,如果这个是低的,一个是高的,如果那个是高的那个,而另一个是低的,因为它正在经历这个丰富的非线性函数。 正是这种丰富的表现形式使它能够学习这种有趣的关系。
**问题** :嵌入是否适合某些类型的变量? [[01:02:45](https://youtu.be/gbceqO8PpBg%3Ft%3D1h2m45s)] 嵌入适用于任何分类变量。 它唯一不能很好地工作的是基数太高的东西。 如果你有600,000行且变量有600,000个级别,那么这不是一个有用的分类变量。 但总的来说,本次比赛的第三名获胜者确实认为所有基因都不是太高,他们都把它们都视为绝对的。 好的经验法则是,如果你可以创建一个分类变量,你也可以这样,因为它可以学习这种丰富的分布式表示; 如果你把它留在连续的地方,它最能做的就是试着找到一个适合它的单一功能形式。
**问题** :嵌入是否适合某些类型的变量? [[01:02:45](https://youtu.be/gbceqO8PpBg%3Ft%3D1h2m45s)] 嵌入适用于任何类别变量。 它唯一不能很好地工作的是基数太高的东西。 如果你有600,000行且变量有600,000个级别,那么这不是一个有用的类别变量。 但总的来说,本次比赛的第三名获胜者确实认为所有基因都不是太高,他们都把它们都视为绝对的。 好的经验法则是,如果你可以创建一个类别变量,你也可以这样,因为它可以学习这种丰富的分布式表示; 如果你把它留在连续的地方,它最能做的就是试着找到一个适合它的单一功能形式。
### 场景背后的矩阵代数 [[01:04:47](https://youtu.be/gbceqO8PpBg%3Ft%3D1h4m47s)]
......@@ -373,7 +373,7 @@ Sequential(
通过使用所有训练数据,我们实现了大约0.09711的RMSPE。 公共领导委员会和私人领导委员会之间存在很大差异,但我们肯定是本次竞赛的最高端。
所以这是一种处理时间序列和结构化数据的技术。 有趣的是,与使用这种技术的组( [分类变量的实体嵌入](https://arxiv.org/abs/1604.06737) )相比,第二名获胜者做了更多的特征工程。 本次比赛的获胜者实际上是物流销售预测的主题专家,因此他们有自己的代码来创建大量的功能。 Pinterest的人们为建议建立了一个非常相似的模型也表示,当他们从梯度增强机器转向深度学习时,他们的功能工程设计更少,而且模型更简单,需要的维护更少。 因此,这是使用这种深度学习方法的一大好处 - 你可以获得最先进的结果,但工作量却少得多。
所以这是一种处理时间序列和结构化数据的技术。 有趣的是,与使用这种技术的组( [类别变量的实体嵌入](https://arxiv.org/abs/1604.06737) )相比,第二名获胜者做了更多的特征工程。 本次比赛的获胜者实际上是物流销售预测的主题专家,因此他们有自己的代码来创建大量的功能。 Pinterest的人们为建议建立了一个非常相似的模型也表示,当他们从梯度增强机器转向深度学习时,他们的功能工程设计更少,而且模型更简单,需要的维护更少。 因此,这是使用这种深度学习方法的一大好处 - 你可以获得最先进的结果,但工作量却少得多。
**问题** :我们是否正在使用任何时间序列? [[01:15:01](https://youtu.be/gbceqO8PpBg%3Ft%3D1h15m1s)] 间接地,是的。 正如我们刚刚看到的那样,我们的列中有一周中的一周,一年中的一些等,其中大多数都被视为类别,因此我们正在构建一月,周日等的分布式表示。 我们没有使用任何经典的时间序列技术,我们所做的只是在神经网络中真正全连接层。 嵌入矩阵能够以比任何标准时间序列技术更丰富的方式处理诸如星期几周期性之类的事情。
......@@ -391,7 +391,7 @@ Sequential(
**步骤摘要** (如果你想将它用于你自己的数据集) [[01:17:56](https://youtu.be/gbceqO8PpBg%3Ft%3D1h17m56s)] :
**第1步** 。 列出分类变量名称,并列出连续变量名称,并将它们放在Pandas数据框中
**第1步** 。 列出类别变量名称,并列出连续变量名称,并将它们放在Pandas数据框中
**第2步** 。 在验证集中创建所需的行索引列表
......@@ -698,7 +698,7 @@ IMDB [大型电影评论数据集](http://ai.stanford.edu/~amaas/data/sentiment/
![](../img/1_6EHxqeSYMioiLEQ5ufrf_g.png)
* 它是一个高基数的分类变量,而且,它是唯一的变量 - 这在NLP中是典型的
* 它是一个高基数的类别变量,而且,它是唯一的变量 - 这在NLP中是典型的
* 嵌入大小为200,比我们以前的嵌入向量大得多。 这并不奇怪,因为一个词比星期日的概念有更多的细微差别。 **通常,单词的嵌入大小将介于50和600之间。**
```
......
......@@ -2,7 +2,7 @@
### [论坛](http://forums.fast.ai/t/wiki-lesson-6/9404)
[2017年深度学习优化的重点](http://ruder.io/deep-learning-optimization-2017/index.html)
[2017 年深度学习优化的重点](http://ruder.io/deep-learning-optimization-2017/index.html)
上周回顾 [[2:15](https://youtu.be/sHcLkfRrgoQ%3Ft%3D2m15s)]
......@@ -34,21 +34,21 @@ EmbeddingDotBias (
`m.ib`是指项目偏差的嵌入层 - 在我们的例子中是电影偏见。 PyTorch模型和层的好处是我们可以将它们称为函数。 因此,如果你想获得预测,则调用`m(...)`并传入变量。
层需要变量而不是张量,因为它需要跟踪导数 - 这就是`V(...)`将张量转换为变量的原因。 PyTorch 0.4将摆脱变量,我们将能够直接使用张量。
层需要变量而不是张量,因为它需要跟踪导数 - 这就是`V(...)`将张量转换为变量的原因。PyTorch 0.4 将摆脱变量,我们将能够直接使用张量。
```py
movie_bias = to_np(m.ib(V(topMovieIdx)))
```
`to_np`函数将采用变量或张量(无论是在CPU还是GPU上)并返回numpy数组。 Jeremy的方法 [[12:03](https://youtu.be/sHcLkfRrgoQ%3Ft%3D12m3s)] 是将numpy用于一切,除非他明确需要在GPU上运行某些东西或者需要它的衍生物 - 在这种情况下他使用PyTorch。 Numpy比PyTorch的使用时间更长,并且可以与OpenCV,Pandas等其他库一起使用。
`to_np`函数将接受变量或张量(无论是在 CPU 还是 GPU 上)并返回 numpy 数组。 Jeremy 的方法 [[12:03](https://youtu.be/sHcLkfRrgoQ%3Ft%3D12m3s)] 是将 numpy 用于一切,除非他明确需要在 GPU 上运行某些东西或者需要它的导数 - 在这种情况下他使用 PyTorch。 Numpy 比 PyTorch 的使用时间更长,并且可以与 OpenCV,Pandas 等其他库一起使用。
有关生产中CPU与GPU的问题。 建议的方法是对CPU进行推理,因为它更具可扩展性,你无需批量生产。 你可以通过键入`m.cpu()`将模型移动到CPU上,类似于键入`V(topMovieIndex).cpu()`的变量(从CPU到GPU将是`m.cuda()` )。如果你的服务器没有GPU ,它会自动在CPU上运行推理。 要加载在GPU上训练过的已保存模型,请查看`torch_imports.py`以下代码`torch_imports.py`
有关生产中 CPU 与 GPU 的问题。 建议的方法是对 CPU 进行推理,因为它更具可扩展性,你无需批量生产。 你可以通过键入`m.cpu()`将模型移动到 CPU 上,类似于对变量键入`V(topMovieIndex).cpu()`(从 CPU 到 GPU 是`m.cuda()`)。如果你的服务器没有 GPU ,它会自动在 CPU 上运行推理。 要加载在 GPU 上训练过的已保存模型,请查看`torch_imports.py`以下代码`torch_imports.py`
```py
def load_model(m, p): m.load_state_dict(torch.load(p, map_location=lambda storage, loc: storage))
```
现在我们对前3000部电影有电影偏见,让我们来看看收视率:
现在我们对前 3000 部电影有了偏差,让我们来看看收视率:
```py
movie_ratings = [(b[0], movie_names[i]) for i,b in zip(topMovies,movie_bias)]
......@@ -58,7 +58,7 @@ movie_ratings = [(b[0], movie_names[i]) for i,b in zip(topMovies,movie_bias)]
#### 最糟糕的电影
关于排序键 - Python有`itemgetter`函数,但普通`lambda`只是一个字符。
对于有序的键 - Python 有`itemgetter`函数,但普通的`lambda`只多了一个字符。
```py
sorted(movie_ratings, key=lambda o: o[0])[:15]
......@@ -88,9 +88,9 @@ sorted(movie_ratings, key=lambda o: o[0], reverse=True)[:15]
'''
```
#### 嵌入解释 [[18:42](https://youtu.be/sHcLkfRrgoQ%3Ft%3D18m42s)]
#### 嵌入解释 [[18:42](https://youtu.be/sHcLkfRrgoQ%3Ft%3D18m42s)]
每部电影有50个嵌入,很难看到50维空间,所以我们将它变成一个三维空间。 我们可以使用几种技术压缩尺寸:主成分分析( [PCA](https://plot.ly/ipython-notebooks/principal-component-analysis/) )(Rachel的计算线性代数类详细介绍了这一点 - 几乎与奇异值分解(SVD)相同)
每部电影有 50 个嵌入,很难看到 50 维空间,所以我们将它变成一个三维空间。 我们可以使用几种技术来压缩维度:[主成分分析(PCA)](https://plot.ly/ipython-notebooks/principal-component-analysis/)(Rachel 的计算线性代数课程详细介绍了这一点 - 几乎与奇异值分解(SVD)相同)
```py
movie_emb = to_np(m.i(V(topMovieIdx)))
......@@ -106,7 +106,7 @@ movie_pca.shape
# (3, 3000)
```
我们将看看第一个维度“轻松观看与严肃”(我们不知道它代表什么但可以通过观察它们来推测):
我们将看看第一个维度“轻松与严肃”(我们不知道它代表什么但可以通过观察它们来推测):
```py
fac0 = movie_pca[0]
......@@ -136,7 +136,7 @@ sorted(movie_comp, key=itemgetter(0))[:10]
'''
```
第二个维度“对话驱动与CGI”
第二个维度“对话驱动与 CGI”
```py
fac1 = movie_pca[1]
......@@ -179,41 +179,41 @@ plt.show()
当你说`learn.fit`时会发生什么?
#### [分类变量的实体嵌入](https://arxiv.org/pdf/1604.06737.pdf) [[24:42](https://youtu.be/sHcLkfRrgoQ%3Ft%3D24m42s)]
#### [类别变量的实体嵌入](https://arxiv.org/pdf/1604.06737.pdf) [[24:42](https://youtu.be/sHcLkfRrgoQ%3Ft%3D24m42s)]
第二篇论文谈论分类嵌入。 图。 1.标题应该听起来很熟悉,因为它们讨论了实体嵌入层如何等效于单热编码,然后是矩阵乘法。
第二篇论文谈论累呗嵌入。 图一的标题应该听起来很熟悉,因为它们讨论了实体嵌入层如何等效于单热编码,然后是矩阵乘法。
![](../img/1_BgBtlqi7Ja6aQ8wGvWQbgQ.png)
他们做的有趣的事情是,他们采用由神经网络训练的实体嵌入,用学习的实体嵌入替换每个分类变量,然后将其输入到梯度增强机(GBM),随机森林(RF)和KNN中 - 这减少了这个错误几乎与神经网络(NN)一样好。 这是一种很好的方式,可以在你的组织中提供神经网络的强大功能,而不必强迫其他人学习深度学习,因为他们可以继续使用他们当前使用的东西并使用嵌入作为输入。 GBM和RF列车比NN快得多。
他们做的有趣的事情是,他们采用由神经网络训练的实体嵌入,用学习的实体嵌入替换每个类别变量,然后将其输入到梯度增强机(GBM),随机森林(RF)和 KNN 中 - 这减少了某些误差,几乎与神经网络(NN)一样好。 这是一种很好的方式,可以在你的组织中提供神经网络的强大功能,而不必强迫其他人学习深度学习,因为他们可以继续使用他们当前使用的东西并使用嵌入作为输入。 GBM 和 RF 的训练比 NN 快得多。
![](../img/1_XYcNx7NmTyblDXa5diFMbg.png)
他们还绘制了德国国家的嵌入,有趣的是(正如杰里米所说的那样“令人费解”)类似于实际的地图。
他们还绘制了德国的州的嵌入,有趣的是(正如 Jeremy 所说的那样“令人费解”)类似于实际的地图。
他们还绘制了物理空间和嵌入空间中商店的距离 - 这显示出美丽而清晰的相关性。
一周的天数或一年中的几个月之间似乎也存在相关性。 可视化嵌入可能很有趣,因为它向你显示你期望看到的内容或你未看到的内容。
#### 关于Skip-Gram生成嵌入的问题 [[31:31](https://youtu.be/sHcLkfRrgoQ%3Ft%3D31m31s)]
#### 关于 Skip-Gram 生成嵌入的问题 [[31:31](https://youtu.be/sHcLkfRrgoQ%3Ft%3D31m31s)]
Skip-Gram特定于NLP。 将未标记的问题转变为标记问题的好方法是“发明”标签。 Word2Vec的方法是采用11个单词的句子,删除中间单词,并用随机单词替换它。 然后他们在原句中给出了标签1; 0到假一个,并建立了一个机器学习模型来查找假句子。 因此,他们现在可以将嵌入物用于其他目的。 如果你将它作为单个矩阵乘数(浅模型)而不是深度神经网络,你可以非常快速地训练 - 缺点是它是一个预测性较低的模型,但优点是你可以训练一个非常大的数据集更重要的是,最终的嵌入具有_线性特征_ ,允许我们很好地加,减或绘制。 在NLP中,我们应该超越Word2Vec和Glove(即基于线性的方法),因为这些嵌入不太具有预测性。 最先进的语言模型使用深度RNN。
Skip-Gram 特定于 NLP。 将未标记的问题转变为标记问题的好方法是“发明”标签。 Word2Vec 的方法是选取 11 个单词的句子,删除中间单词,并用随机单词替换它。 然后他们将标签 1 给原句,标签 0 给假的句子,并建立了一个机器学习模型来查找假的句子。 因此,他们现在可以将嵌入用于其他目的。 如果你将它实现为单个矩阵乘法(浅模型)而不是深度神经网络,你可以非常快速地训练 - 缺点是它是一个预测性较低的模型,但优点是你可以训练一个非常大的数据集,更重要的是,最终的嵌入具有线性特征 ,允许我们很好地加,减或绘制。 在 NLP 中,我们应该超越 Word2Vec 和 Glove(即基于线性的方法),因为这些嵌入不太具有预测性。 最先进的语言模型使用深度 RNN。
#### 要学习任何类型的特征空间,你需要标记数据或者需要发明虚假任务 [[35:45](https://youtu.be/sHcLkfRrgoQ%3Ft%3D35m45s)]
* 一个假的任务比另一个好吗? 还没有很好的研究。
* 直观地说,我们想要一个帮助机器学习你关心的各种关系的任务
* 一个虚假任务比另一个好吗? 还没有很好的研究。
* 直观地说,我们想要一个任务,帮助机器学习你关心的各种关系
* 在计算机视觉中,人们使用的一种虚假任务是应用虚幻和不合理的数据增强。
* 如果你不能提出很棒的假任务,那就去使用糟糕的任务 - 你需要的很少,这通常是令人惊讶的。
* **自动编码器** [[38:10](https://youtu.be/sHcLkfRrgoQ%3Ft%3D38m10s)] - 它最近赢得了[保险索赔竞赛](https://www.kaggle.com/c/porto-seguro-safe-driver-prediction/discussion/44629) 。 采取单一策略,通过神经网络运行,并让它重建自己(确保中间层的激活少于输入变量)。 基本上,这是一个任务,其输入=输出作为一个假任务令人惊讶地工作
* 如果你不能提出很棒的假任务,那就去使用糟糕的任务 - 你需要的很少,这通常是令人惊讶的。
* **自编码器** [[38:10](https://youtu.be/sHcLkfRrgoQ%3Ft%3D38m10s)] - 它最近赢得了[保险索赔竞赛](https://www.kaggle.com/c/porto-seguro-safe-driver-prediction/discussion/44629)。 采取单一策略,通过神经网络运行,并让它重建自己(确保中间层的激活少于输入变量)。 基本上,这是一个任务,其输入等于输出,作为一个假任务它有效,令人惊讶
在计算机视觉中,你可以对猫和狗进行训练并将其用于CT扫描。 也许它可能适用于语言/ NLP! (未来的研究)
在计算机视觉中,你可以在猫狗上训练并将其用于 CT 扫描。 也许它可能适用于语言/ NLP! (未来的研究)
#### [罗斯曼](https://github.com/fastai/fastai/blob/master/courses/dl1/lesson3-rossman.ipynb) [[41:04](https://youtu.be/sHcLkfRrgoQ%3Ft%3D41m4s)]
#### [Rossmann](https://github.com/fastai/fastai/blob/master/courses/dl1/lesson3-rossman.ipynb) [[41:04](https://youtu.be/sHcLkfRrgoQ%3Ft%3D41m4s)]
* 正确使用测试集的方法已添加到笔记本中。
* 有关更详细的说明,请参阅机器学习课程。
* `apply_cats(joined_test, joined)`用于确保测试集和训练集具有相同的分类代码
* 对于更详细的说明,请参阅机器学习课程。
* `apply_cats(joined_test, joined)`用于确保测试集和训练集具有相同的类别编号
* 跟踪包含每个连续列的平均值和标准差的`mapper` ,并将相同的`mapper`应用于测试集。
* 不要依赖Kaggle公共董事会 - 依靠你自己精心设计的验证集。
......@@ -245,7 +245,7 @@ Skip-Gram特定于NLP。 将未标记的问题转变为标记问题的好方法
同样,我们现在了解`forward`功能正在发生什么。
* 使用第_i_个分类变量调用嵌入层并将它们连接在一起
* 使用第_i_个类别变量调用嵌入层并将它们连接在一起
* 通过 Dropout 把它
* 浏览每个线性层,调用它,应用relu和dropout
* 然后最终线性层的大小为1
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册