这一章最后给的lstm样例有个错误,导致最后画出来的图有问题。
原来的generate_data方法以及生成数据的code如下:
def generate_data(seq):
X = []
y = []
# 序列的第i项和后面的TIMESTEPS-1项合在一起作为输入;第i + TIMESTEPS项作为输
# 出。即用sin函数前面的TIMESTEPS个点的信息,预测第i + TIMESTEPS个点的函数值。
for i in range(len(seq) - TIMESTEPS):
X.append([seq[i: i + TIMESTEPS]])
y.append([seq[i + TIMESTEPS]])
return np.array(X, dtype=np.float32), np.array(y, dtype=np.float32)
# 用正弦函数生成训练和测试数据集合。
test_start = (TRAINING_EXAMPLES + TIMESTEPS) * SAMPLE_GAP
test_end = test_start + (TESTING_EXAMPLES + TIMESTEPS) * SAMPLE_GAP
train_X, train_y = generate_data(np.sin(np.linspace(
0, test_start, TRAINING_EXAMPLES + TIMESTEPS, dtype=np.float32)))
test_X, test_y = generate_data(np.sin(np.linspace(
test_start, test_end, TESTING_EXAMPLES + TIMESTEPS, dtype=np.float32)))
这样生成的数据的shape分别如下:
train_X:(10000,1,10)
test_y:(1000,1,10)
使用lstm model预测test后,画出来的图片如下:
图片只有橙色(real_sin)的图形,没有蓝色(predictions)的图形。注意:这里并不是二者完全重合的缘故。
主要的原因是使用generate_data()方法产生出来的数据维度不对,不应该是(?,1,10)这样,而应该是(?,10,1)。喂给lstm模型的(x,y,z)应该分别对应:(batchsizze,maxtime,input)。可以参见Tensorflow的官方文档https://tensorflow.google.cn/api_docs/python/tf/nn/dynamic_rnn。
改的话,可以在最后转化一下:
train_X = np.reshape(train_X,(10000,10,1))
test_X = np.reshape(test_X,(1000,10,1))
运行code之后,生成的图像如下:
虽然大部分重叠,但是明显能看出蓝色预测图形的。