如何理解lstm的输入输出

例如这样一个数据集合,总共100条句子,每个句子20个词,每个词都由一个80维的向量表示。在lstm中,单个样本即单条句子输入下(shape是 [1 , 20, 80]),假如设定每一个time step的输入是一个词(当然这不一定,你也可以调成两个词或者更多个数的词),则在t0时刻是第一个时间步,输入x0则为代表一条句子(一个样本)中第1个词的80维向量,t1是第二个时间步,x1表示该句子中第2个词的80维向量,依次类推t19输入是最后一个词即第20个词的向量表示。

常见的tf或者keras中lstm的参数(samples, timestep, input_dim),samples是指批量训练样本的数量, timestep是时间步(这个时间步可自己设置)比如上面说的20,input-dim是每个time step的输入shape

假设输入的样本是一条条的句子:

样本1:“”富强,民主,文明,和谐,自由,平等,公正,法治,爱国,敬业,诚信,友善“”

样本2:“”实现伟大中国梦“”

样本3:“”跑得比谁都快“”

对于这样的不同长度的样本,因为长短不一,需要先编码,embedding成相同维度的数据。比如每个句子embedding成shape为[24, 80],这样的话,若批训练的BatchSize是1的话, A假如你的时间步设置为12,那么需要将单个样本X, reshape成【1,12,160】,输入到LSTM,此时LSTM中每个时间步输入X_t的shape是[1,160];

B假如你的时间步设置为24,那么需要将单个样本X, reshape成【1, 24, 80】, 输入到LSTM, 此时LSTM每个时间步输入X_t的shape就是【1,80】.

盗用下知友的图如下, X_t就是下图中的X0,X1,.....Xn:

image

其实,从另一个角度也可以区分,time_step是神经网络的参数,网络建好了便不会改变;batch是训练参数,在训练时可根据效果随时调整。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容