作为玩具问题,我试图从某个功能生成序列,例如窦 . 为此,我在Tensorflow中使用LSTM . 我想我从官方网站上了解了第一个LSTM教程,但没有使用第二个(seq2seq) - 一个,因为我不知道它是否与问题匹配,因为我想先手动解决它 . 我还查看了其他一些帖子,比如生成字符序列 .

为了训练,我提供长度为n的正弦函数的网络序列,目标输出是相同的序列,右移一个 . 在这些之间我计算L2损失并将其用于训练 .

inputs = tf.unpack(self.input_data, num=num_steps, axis=1) 
outputs, state = tf.nn.rnn(self.cell, inputs, initial_state=self.initial_state)

在输出上,我应用完全连接的层为每个批次获取一个输出:

self.output = (tf.add(tf.matmul(output, output_w1),output_b1))

训练效果很好,误差接近0.然后我想用学习的参数重建窦功能 . 为此,我将序列长度切换为1并一次输入一个值 . 我以一些批次的形式给网络一些启动(从训练数据中输入下一个值),然后使用每个步骤的输出作为新输入 . 但是,这根本不起作用 . 初始化之后,输出开始与正弦函数不同,并收敛到某个固定值 . 但有趣的是,当我在输入训练数据的同时获取绘图的网络输出时,正确地重建了窦 . 我甚至可以在每个第二步中输入所创建的输出以获得正弦函数,它似乎只需要这种“稳定” .

我的第一个问题是,这个程序是否正确?训练这个序列丢失和一次一个值的推理 . 即使这样有效,但速度非常慢 - 这有什么改进吗?当然:为什么这么糟糕,我做错了什么?

任何帮助将不胜感激!谢谢 :)