为什么在训练期间需要调用zero_grad() ?

|  zero_grad(self)
|      Sets gradients of all model parameters to zero.

如何在PyTorch中保存训练好的模型?我读到过:

Torch.save ()/torch.load()用于保存/加载可序列化对象。 model.state_dict()/model.load_state_dict()用于保存/加载模型状态。

对于任何Keras层(层类),有人能解释一下如何理解input_shape,单位,暗淡等之间的区别吗?

例如,文档说单位指定一个层的输出形状。

在神经网络的图像中,隐藏层1有4个单元。这是否直接转换为图层对象的单位属性?或者Keras中的单位是否等于隐藏层中每个权重的形状乘以单位的数量?

简而言之,如何理解/可视化模型的属性-特别是层-与下面的图像?

我试图调和我对lstm的理解,并在Christopher Olah在Keras中实现的这篇文章中指出。我正在关注Jason Brownlee写的关于Keras教程的博客。我最困惑的是,

将数据序列重塑为[样本,时间步长,特征], 有状态lstm

让我们把注意力集中在上面两个问题上,参考下面粘贴的代码:

# reshape into X=t and Y=t+1
look_back = 3
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)

# reshape input to be [samples, time steps, features]
trainX = numpy.reshape(trainX, (trainX.shape[0], look_back, 1))
testX = numpy.reshape(testX, (testX.shape[0], look_back, 1))
########################
# The IMPORTANT BIT
##########################
# create and fit the LSTM network
batch_size = 1
model = Sequential()
model.add(LSTM(4, batch_input_shape=(batch_size, look_back, 1), stateful=True))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
for i in range(100):
    model.fit(trainX, trainY, nb_epoch=1, batch_size=batch_size, verbose=2, shuffle=False)
    model.reset_states()

注意:create_dataset接受长度为N的序列,并返回一个N-look_back数组,其中每个元素都是一个长度为N的look_back序列。

什么是时间步长和特征?

可以看到,TrainX是一个三维数组,Time_steps和Feature分别是最后两个维度(在这个特定的代码中是3和1)。对于下图,这是否意味着我们正在考虑多对一的情况,其中粉色盒子的数量是3?或者它字面上的意思是链长为3(即只考虑3个绿色盒子)。

当我们考虑多元级数时,特征参数是否相关?例如,同时对两只金融股建模?

有状态LSTMs

有状态lstm是否意味着我们在批运行之间保存单元内存值?如果是这种情况,batch_size为1,并且在训练运行之间重置内存,那么说它是有状态的有什么意义呢?我猜这与训练数据没有被打乱有关,但我不确定是怎么回事。

任何想法吗? 图片参考:http://karpathy.github.io/2015/05/21/rnn-effectiveness/

编辑1:

@van关于红色和绿色盒子相等的评论有点困惑。为了确认,下面的API调用是否与展开的图表相对应?特别注意第二个图(batch_size是任意选择的):

编辑2:

如果你已经上过Udacity的深度学习课程,但仍然对time_step参数感到困惑,请查看下面的讨论:https://discussions.udacity.com/t/rnn-lstm-use-implementation/163169

更新:

原来model.add(timedidistributeddense (vocab_len))就是我要找的。这里有一个例子:https://github.com/sachinruk/ShakespeareBot

更新2:

我在这里总结了我对lstm的大部分理解:https://www.youtube.com/watch?v=ywinX5wgdEU

在接下来的TensorFlow函数中,我们必须在最后一层中输入人工神经元的激活。我能理解。但我不明白为什么叫logits?这不是一个数学函数吗?

loss_function = tf.nn.softmax_cross_entropy_with_logits(
     logits = last_layer,
     labels = target_output
)

在tf.nn中“SAME”和“VALID”填充之间的区别是什么?tensorflow的Max_pool ?

在我看来,'VALID'意味着当我们做max pool时,边缘外不会有零填充。

根据深度学习卷积算法指南,它说池操作符中不会有填充,即只使用tensorflow的“VALID”。 但什么是'SAME'填充的最大池张量流量?