标签: lstm

TensorFlow使用LSTM生成文本

我想使用tensorflow生成文本,并且一直在修改LSTM教程(https://www.tensorflow.org/versions/master/tutorials/recurrent/index.html#recurrent-neural-networks)代码来执行此操作,然而,我的初始解决方案似乎产生了废话,即使经过长时间的训练,它也没有改善.我不明白为什么.我们的想法是从零矩阵开始,然后一次生成一个单词.

这是代码,我在https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/models/rnn/ptb/ptb_word_lm.py下添加了两个函数.

发电机看起来如下

def generate_text(session,m,eval_op):

    state = m.initial_state.eval()

    x = np.zeros((m.batch_size,m.num_steps), dtype=np.int32)

    output = str()
    for i in xrange(m.batch_size):
        for step in xrange(m.num_steps):
            try:
                # Run the batch 
                # targets have to bee set but m is the validation model, thus it should not train the neural network
                cost, state, _, probabilities = session.run([m.cost, m.final_state, eval_op, m.probabilities],
                                                            {m.input_data: x, m.targets: x, m.initial_state: state})

                # Sample a word-id and add it to the matrix and output
                word_id …
Run Code Online (Sandbox Code Playgroud)

lstm tensorflow

14
推荐指数
2
解决办法
8064
查看次数

如何计算LSTM网络的参数数量?

有没有办法计算LSTM网络中的参数总数.

我找到了一个例子,但我不确定是多么正确或者我是否理解正确.

例如,考虑以下示例: -

from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.layers import Embedding
from keras.layers import LSTM
model = Sequential()
model.add(LSTM(256, input_dim=4096, input_length=16))
model.summary()
Run Code Online (Sandbox Code Playgroud)

产量

____________________________________________________________________________________________________
Layer (type)                       Output Shape        Param #     Connected to                     
====================================================================================================
lstm_1 (LSTM)                      (None, 256)         4457472     lstm_input_1[0][0]               
====================================================================================================
Total params: 4457472
____________________________________________________________________________________________________
Run Code Online (Sandbox Code Playgroud)

根据我的理解n是输入向量长度.并且m是时间步数.在这个例子中,他们认为隐藏层的数量为1.

因此根据帖子中 的公式.4(nm+n^2)在我的例子中m=16; n=4096;num_of_units=256

4*((4096*16)+(4096*4096))*256 = 17246978048
Run Code Online (Sandbox Code Playgroud)

为什么会有这样的差异?我误解了这个例子还是公式错了?

machine-learning neural-network deep-learning lstm keras

14
推荐指数
4
解决办法
1万
查看次数

使用张量流来理解LSTM模型以进行情绪分析

我正在尝试使用Tensorflow学习用于情绪分析的LSTM模型,我已经完成了LSTM模型.

下面的代码(create_sentiment_featuresets.py)生成5000个正面句子和5000个否定句子的词典.

import nltk
from nltk.tokenize import word_tokenize
import numpy as np
import random
from collections import Counter
from nltk.stem import WordNetLemmatizer

lemmatizer = WordNetLemmatizer()

def create_lexicon(pos, neg):
    lexicon = []
    with open(pos, 'r') as f:
        contents = f.readlines()
        for l in contents[:len(contents)]:
            l= l.decode('utf-8')
            all_words = word_tokenize(l)
            lexicon += list(all_words)
    f.close()

    with open(neg, 'r') as f:
        contents = f.readlines()    
        for l in contents[:len(contents)]:
            l= l.decode('utf-8')
            all_words = word_tokenize(l)
            lexicon += list(all_words)
    f.close()

    lexicon …
Run Code Online (Sandbox Code Playgroud)

python machine-learning deep-learning lstm tensorflow

14
推荐指数
1
解决办法
1155
查看次数

具有缺失值的多变量LSTM

我正在使用LSTM处理时间序列预测问题.输入包含多个功能,因此我使用的是多变量LSTM.问题是存在一些缺失值,例如:

    Feature 1     Feature 2  ...  Feature n
 1    2               4             nan
 2    5               8             10
 3    8               8              5
 4    nan             7              7
 5    6              nan            12
Run Code Online (Sandbox Code Playgroud)

而不是插入缺失值,这可能会在结果中引入偏差,因为有时在同一个特征上有很多连续的时间戳和缺失值,我想知道是否有办法让LSTM学习缺失值,例如,使用掩蔽层或类似的东西?有人可以向我解释一下处理这个问题的最佳方法是什么?我正在使用Tensorflow和Keras.

missing-data neural-network lstm keras tensorflow

14
推荐指数
1
解决办法
2551
查看次数

Keras LSTM自动编码器时间序列重建

我正在尝试使用LSTM Autoencoder(Keras)重建时间序列数据。现在,我想在少量样本上训练自动编码器(5个样本,每个样本的长度为500个时间步长,并且具有1维)。我想确保模型可以重建5个样本,然后再使用所有数据(6000个样本)。

window_size = 500
features = 1
data = data.reshape(5, window_size, features)

model = Sequential()

model.add(LSTM(256, input_shape=(window_size, features), 
return_sequences=True))
model.add(LSTM(128, input_shape=(window_size, features), 
return_sequences=False))
model.add(RepeatVector(window_size))

model.add(LSTM(128, input_shape=(window_size, features), 
return_sequences=True))
model.add(LSTM(256, input_shape=(window_size, features), 
return_sequences=True))
model.add(TimeDistributed(Dense(1)))

model.compile(optimizer='adam', loss='mse')
model.fit(data, data, epochs=100, verbose=1)
Run Code Online (Sandbox Code Playgroud)

模型

训练:

Epoch 1/100
5/5 [==============================] - 2s 384ms/step - loss: 0.1603
...
Epoch 100/100
5/5 [==============================] - 2s 388ms/step - loss: 0.0018
Run Code Online (Sandbox Code Playgroud)

训练后,我尝试重建5个样本之一:

yhat = model.predict(np.expand_dims(data[1,:,:], axis=0), verbose=0)
Run Code Online (Sandbox Code Playgroud)

重构:蓝色
输入:橙色

重构(蓝色)与输入(橙色)

当损失很小时,为什么重建如此糟糕?如何改善模型?谢谢。

python time-series autoencoder lstm keras

14
推荐指数
2
解决办法
1003
查看次数

为什么我的keras LSTM模型陷入无限循环?

我正在尝试构建一个小型LSTM,可以通过在现有的Python代码上进行训练来学习编写代码(即使是垃圾代码)。我将几千行代码连接在一个文件中,跨越数百个文件,每个文件都<eos>以“序列结束”结尾。

例如,我的训练文件如下所示:


setup(name='Keras',
...
      ],
      packages=find_packages())
<eos>
import pyux
...
with open('api.json', 'w') as f:
    json.dump(sign, f)
<eos>
Run Code Online (Sandbox Code Playgroud)

我正在使用以下单词创建令牌:

file = open(self.textfile, 'r')
filecontents = file.read()
file.close()
filecontents = filecontents.replace("\n\n", "\n")
filecontents = filecontents.replace('\n', ' \n ')
filecontents = filecontents.replace('    ', ' \t ')

text_in_words = [w for w in filecontents.split(' ') if w != '']

self._words = set(text_in_words)
    STEP = 1
    self._codelines = []
    self._next_words = []
    for i in range(0, len(text_in_words) - self.seq_length, STEP):
        self._codelines.append(text_in_words[i: i …
Run Code Online (Sandbox Code Playgroud)

python neural-network lstm keras tensorflow

14
推荐指数
1
解决办法
328
查看次数

ValueError:输入0与层lstm_13不兼容:预期ndim = 3,找到ndim = 4

我正在尝试进行多级分类,这里是我的训练输入和输出的详细信息:

train_input.shape =(1,95000,360)(95000长度输入数组,每个元素是360长度的数组)

train_output.shape =(1,95000,22)(22门课程)

model = Sequential()

model.add(LSTM(22, input_shape=(1, 95000,360)))
model.add(Dense(22, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
model.fit(train_input, train_output, epochs=2, batch_size=500)
Run Code Online (Sandbox Code Playgroud)

错误是:

ValueError:输入0与层lstm_13不兼容:期望ndim = 3,在行中找到ndim = 4:model.add(LSTM(22,input_shape =(1,95000,360)))

请帮帮我,我无法通过其他答案解决.

python lstm keras recurrent-neural-network

13
推荐指数
4
解决办法
3万
查看次数

有人可以向我解释初始化keras lstm层时传递的激活和重复激活参数之间的区别吗?

有人可以向我解释初始化keras lstm层时传递的激活和重复激活参数之间的区别吗?

根据我的理解,LSTM有4层.如果我没有将任何激活参数传递给LSTM构造函数,请解释每个层的默认激活函数是什么?

lstm keras keras-layer

13
推荐指数
3
解决办法
3906
查看次数

如何使用DataSet API在Tensorflow中为tf.train.SequenceExample数据创建填充批次?

为了在Tensorflow中训练LSTM模型,我将数据结构化为tf.train.SequenceExample格式并将其存储到TFRecord文件中.我现在想使用新的DataSet API来生成用于训练的填充批次.在文档中有一个使用padded_batch的例子,但对于我的数据,我无法弄清楚padded_shapes应该是什么值.

为了将TFrecord文件读入批处理,我编写了以下Python代码:

import math
import tensorflow as tf
import numpy as np
import struct
import sys
import array

if(len(sys.argv) != 2):
  print "Usage: createbatches.py [RFRecord file]"
  sys.exit(0)


vectorSize = 40
inFile = sys.argv[1]

def parse_function_dataset(example_proto):
  sequence_features = {
      'inputs': tf.FixedLenSequenceFeature(shape=[vectorSize],
                                           dtype=tf.float32),
      'labels': tf.FixedLenSequenceFeature(shape=[],
                                           dtype=tf.int64)}

  _, sequence = tf.parse_single_sequence_example(example_proto, sequence_features=sequence_features)

  length = tf.shape(sequence['inputs'])[0]
  return sequence['inputs'], sequence['labels']

sess = tf.InteractiveSession()

filenames = tf.placeholder(tf.string, shape=[None])
dataset = tf.contrib.data.TFRecordDataset(filenames) …
Run Code Online (Sandbox Code Playgroud)

python lstm tensorflow tensorflow-datasets

13
推荐指数
1
解决办法
9514
查看次数

有状态LSTM和流预测

我已经在7批样品的多批次上训练了一个LSTM模型(用Keras和TF构建),每个样品有3个特征,下面的样本形状类似(下面的数字只是占位符以便解释),每个批次标记为0或1:

数据:

[
   [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
   [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
   [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
   ...
]
Run Code Online (Sandbox Code Playgroud)

即:m个序列的批次,每个长度为7,其元素是三维向量(因此批次具有形状(m*7*3))

目标:

[
   [1]
   [0]
   [1]
   ...
]
Run Code Online (Sandbox Code Playgroud)

在我的生产环境中,数据是具有3个特征([1,2,3],[1,2,3]...)的样本流.我希望在每个样本到达我的模型时流式传输并获得中间概率而不等待整个批次(7) - 请参阅下面的动画.

在此输入图像描述

我的一个想法是用缺少的样本填充批处理0, [[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[1,2,3]]但这似乎是低效的.

我将非常感谢任何帮助,这些帮助将指引我以持久的方式保存LSTM中间状态,同时等待下一个样本并预测使用部分数据训练特定批量大小的模型.


更新,包括型号代码:

opt = optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=10e-8, decay=0.001)
model = Sequential()

num_features = data.shape[2]
num_samples = data.shape[1]

first_lstm = LSTM(32, batch_input_shape=(None, num_samples, num_features), return_sequences=True, activation='tanh')
model.add(
    first_lstm)
model.add(LeakyReLU())
model.add(Dropout(0.2))
model.add(LSTM(16, return_sequences=True, activation='tanh'))
model.add(Dropout(0.2))
model.add(LeakyReLU())
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer=opt,
              metrics=['accuracy', keras_metrics.precision(), keras_metrics.recall(), f1])
Run Code Online (Sandbox Code Playgroud)

型号摘要:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM) …
Run Code Online (Sandbox Code Playgroud)

python stateful lstm keras tensorflow

13
推荐指数
2
解决办法
1336
查看次数