您的位置:主页 > 农业新闻 >
LSTM神经网络输入输出究竟是怎样的
发布时间:2019-11-19 19:54:28   点击:509次

2017年1月4日文章RecurrentLayers——介绍第一要明确的是神经网络所处理的单位全部都是:向量下面就解释为什么你会看到训练数据会是矩阵和张量常规feedforward输入和输出:矩阵输入矩阵形状:(n_samples,dim_input)输出矩阵形状:(n_samples,dim_output)注:真正测试/训练的时候,网络的输入和输出就是向量而已。加入n_samples这个维度是为了可以实现一次训练多个样本,求出平均梯度来更新权重,这个叫做Mini-batchgradientdescent。如果n_samples等于1,那么这种更新方式叫做StochasticGradientDescent(SGD)。Feedforward的输入输出的本质都是单个向量。常规Recurrent(RNN/LSTM/GRU)输入和输出:张量输入张量形状:(time_steps,n_samples,dim_input)输出张量形状:(time_steps,n_samples,dim_output)注:同样是保留了Mini-batchgradientdescent的训练方式,但不同之处在于多了timestep这个维度。Recurrent的任意时刻的输入的本质还是单个向量,只不过是将不同时刻的向量按顺序输入网络。所以你可能更愿意理解为一串向量asequenceofvectors,或者是矩阵。python代码表示预测的话:importnumpyasnp#当前所累积的hidden_state,若是最初的vector,则hidden_state全为0hidden_state=np.zeros((n_samples,dim_input))#print(inputs.shape):(time_steps,n_samples,dim_input)outputs=np.zeros((time_steps,n_samples,dim_output))foriinrange(time_steps):#输出当前时刻的output,同时更新当前已累积的hidden_stateoutputs[i],hidden_state=RNN.predict(inputs[i],hidden_state)#print(outputs.shape):(time_steps,n_samples,dim_output)但需要注意的是,Recurrentnets的输出也可以是矩阵,而非三维张量,取决于你如何设计。若想用一串序列去预测另一串序列,那么输入输出都是张量(例如语音识别或机器翻译一个中文句子翻译成英文句子(一个单词算作一个向量),机器翻译还是个特例,因为两个序列的长短可能不同,要用到seq2seq;若想用一串序列去预测一个值,那么输入是张量,输出是矩阵(例如,情感分析就是用一串单词组成的句子去预测说话人的心情)Feedforward能做的是向量对向量的one-to-onemapping,Recurrent将其扩展到了序列对序列sequence-to-sequencemapping.但单个向量也可以视为长度为1的序列。所以有下图几种类型:最左侧的onetoone是feedforward能做的,右侧都是Recurrent所扩展的若还想知道更多可以将Recurrent的横向操作视为累积已发生的事情,并且LSTM的memorycell机制会选择记忆或者忘记所累积的信息来预测某个时刻的输出。以概率的视角理解的话:就是不断的conditioningon已发生的事情,以此不断缩小samplespaceRNN的思想是:currentoutput不仅仅取决于currentinput,还取决于previousstate;可以理解成currentoutput是由currentinput和previoushiddenstate两个输入计算而出的。并且每次计算后都会有信息残留于previoushiddenstate中供下一次计算

上一篇:不同部位的牛肉有什么区别做出的牛排口感有何差异 下一篇:阿迪的boost耐克的zoom还有亚瑟士的gel同价位有都穿过的么想入手慢跑用哪个脚感更好一点
Copyright © 2010-2011 濮阳市华龙区农业信息网 版权所有   网站地图
   备案编号: 豫ICP备10209956号