作为玩具问题,我试图从某个功能生成序列,例如窦。为此,我在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并一次输入一个值。 我以一些批次的形式给网络一些启动(从训练数据中输入下一个值),然后使用每个步骤的输出作为新输入。 但是,这根本不起作用。初始化之后,输出开始与正弦函数不同,并收敛到某个固定值。但有趣的是,当我在输入训练数据的同时获取绘图的网络输出时,正确地重建了窦。我甚至可以在每个第二步中输入所创建的输出以获得窦功能,它似乎需要这个"稳定"。
我的第一个问题是,这个程序是否正确?训练这个序列丢失和一次一个值的推理。 即使这样有效,但速度非常慢 - 这有什么改进吗? 当然:为什么这么糟糕,我做错了什么?
任何帮助将不胜感激! 谢谢:))