从Keras文档:
dropout:浮点数介于0和1之间.为输入的线性变换而下降的单位的分数.
recurrent_dropout:浮点数在0和1之间.对于循环状态的线性变换,单位的分数下降.
任何人都可以指出每个辍学下面的图像在哪里发生?
通过使用pyTorch有两种方式滤除
torch.nn.Dropout
和torch.nn.functional.Dropout
.
我很难看到使用它们之间的区别
- 何时使用什么?
- 这有什么不同吗?
当我换掉它时,我没有看到任何性能差异.
偶尔我会看到一些模型正在使用SpatialDropout1D
而不是Dropout
.例如,在词性标注神经网络中,他们使用:
model = Sequential()
model.add(Embedding(s_vocabsize, EMBED_SIZE,
input_length=MAX_SEQLEN))
model.add(SpatialDropout1D(0.2)) ##This
model.add(GRU(HIDDEN_SIZE, dropout=0.2, recurrent_dropout=0.2))
model.add(RepeatVector(MAX_SEQLEN))
model.add(GRU(HIDDEN_SIZE, return_sequences=True))
model.add(TimeDistributed(Dense(t_vocabsize)))
model.add(Activation("softmax"))
Run Code Online (Sandbox Code Playgroud)
根据Keras的文件,它说:
此版本执行与Dropout相同的功能,但它会丢弃整个1D功能图而不是单个元素.
但是,我无法理解entrie 1D功能的含义.更具体地说,我无法SpatialDropout1D
在quora中解释的相同模型中进行可视化.有人可以使用与quora相同的模型来解释这个概念吗?
另外,在什么情况下我们会用SpatialDropout1D
而不是Dropout
?
machine-learning deep-learning conv-neural-network keras dropout
我正在研究卷积神经网络.我对CNN中的某些层感到困惑.
关于ReLu ......我只知道它是无限逻辑函数的总和,但是ReLu没有连接到任何上层.为什么我们需要ReLu,它是如何工作的?
关于辍学......辍学如何运作?我听了G. Hinton的视频讲话.他说,有一种策略可以在训练权重时随机忽略一半节点,并在预测时减半.他说,它的灵感来自随机森林,与计算这些随机训练模型的几何平均值完全相同.
这种策略与辍学一样吗?
有人可以帮我解决这个问题吗?
在Keras中,您可以像这样指定一个dropout图层:
model.add(Dropout(0.5))
Run Code Online (Sandbox Code Playgroud)
但是使用GRU单元格,您可以将dropout指定为构造函数中的参数:
model.add(GRU(units=512,
return_sequences=True,
dropout=0.5,
input_shape=(None, features_size,)))
Run Code Online (Sandbox Code Playgroud)
有什么不同?一个比另一个好吗?
在Keras的文档中, 它将其添加为单独的丢失层(请参阅"使用LSTM进行序列分类")
此代码尝试使用dropout的自定义实现:
%reset -f
import torch
import torch.nn as nn
# import torchvision
# import torchvision.transforms as transforms
import torch
import torch.nn as nn
import torch.utils.data as data_utils
import numpy as np
import matplotlib.pyplot as plt
import torch.nn.functional as F
num_epochs = 1000
number_samples = 10
from sklearn.datasets import make_moons
from matplotlib import pyplot
from pandas import DataFrame
# generate 2d classification dataset
X, y = make_moons(n_samples=number_samples, noise=0.1)
# scatter plot, dots colored by class value
x_data = [a for a …
Run Code Online (Sandbox Code Playgroud) 我读到的关于将退出应用于rnn的所有内容都参考了Zaremba等人的论文.al表示不在经常性连接之间应用辍学.应在LSTM层之前或之后随机丢弃神经元,而不是LSTM间层.好.
在每个人都引用的论文中,似乎在每个时间步长应用一个随机的"丢失掩码",而不是生成一个随机的"丢失掩码"并重新使用它,将它应用于丢弃的给定层中的所有时间步长.然后在下一批产生一个新的"辍学掩码".
此外,可能更重要的是,tensorflow是如何做到的?我已经检查了tensorflow api,并试图寻找详细的解释,但还没有找到一个.
假设我们有一个用于时间序列预测的 LSTM 模型。此外,这是一种多变量情况,因此我们使用多个特征来训练模型。
ipt = Input(shape = (shape[0], shape[1])
x = Dropout(0.3)(ipt) ## Dropout before LSTM.
x = CuDNNLSTM(10, return_sequences = False)(x)
out = Dense(1, activation='relu')(x)
Run Code Online (Sandbox Code Playgroud)
我们可以Dropout
在 LSTM 之前(如上面的代码)或 LSTM 之后添加层。
如果我们在 LSTM 之前添加它,它是在时间步长(时间序列的不同滞后)或不同的输入特征上应用 dropout,还是两者兼而有之?
如果我们在 LSTM 之后添加它并且因为return_sequences
is False
,那么 dropout 在这里做什么?
dropout
option inLSTM
和 dropout layer before LSTM
layer有什么区别吗?
该model.eval()
方法修改了某些在训练和推理过程中需要表现不同的模块(层)。文档中列出了一些示例:
这仅对某些模块有影响。请参阅特定模块的文档,了解其在培训/评估模式下的行为详细信息(如果它们受到影响),例如
Dropout
、BatchNorm
等。
是否有受影响模块的详尽列表?
这是我定义的模型,它是具有2个完全连接层的简单lstm。
import copy
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
class mylstm(nn.Module):
def __init__(self,input_dim, output_dim, hidden_dim,linear_dim):
super(mylstm, self).__init__()
self.hidden_dim=hidden_dim
self.lstm=nn.LSTMCell(input_dim,self.hidden_dim)
self.linear1=nn.Linear(hidden_dim,linear_dim)
self.linear2=nn.Linear(linear_dim,output_dim)
def forward(self, input):
out,_=self.lstm(input)
out=nn.Dropout(p=0.3)(out)
out=self.linear1(out)
out=nn.Dropout(p=0.3)(out)
out=self.linear2(out)
return out
Run Code Online (Sandbox Code Playgroud)
x_train
和x_val
是带有shape的float数据帧(4478,30)
,而y_train
和y_val
是带有shape的float df(4478,10)
x_train.head()
Out[271]:
0 1 2 3 ... 26 27 28 29
0 1.6110 1.6100 1.6293 1.6370 ... 1.6870 1.6925 1.6950 1.6905
1 1.6100 1.6293 1.6370 1.6530 ... 1.6925 1.6950 …
Run Code Online (Sandbox Code Playgroud)