【发布时间】:2021-06-12 18:42:18
【问题描述】:
所以基本上我有一个 LSTM 模型,它接收一堆数字(这些数字实际上是我转换成数字的音符。如果你想知道的话,我的目标是创建计算机生成的音乐)。我遇到的问题是我不知道如何做出预测。我希望计算机输出的是一个数字列表(或字符串或任何可能的数字),这些数字遵循它在训练过程中提出的任何规则。在以前的项目中,我只知道如何输出 1 个预测数字,给计算机一些数据进行预测,但我想要一个全新的列表,而不给计算机一个起始值。最好计算机一次可以生成一个以上的数字。
这是我目前拥有的代码。它现在不起作用:
n_steps = 1
X, y = split_sequence(data, n_steps)
X = X.reshape((X.shape[0], X.shape[1], 1))
X = tf.cast(X, dtype='float32')
model = Sequential()
model.add(LSTM(256, activation='relu', return_sequences=True))
#model.add(Dropout(0.2)) # I am not sure what this is, but it doesn't break my code
model.add(LSTM(128, activation='relu', return_sequences=True))
#model.add(Dropout(0.2))
model.add(LSTM(128))
#model.add(Dropout(0.2))
model.add(Dense(1, activation='linear'))
model.compile(optimizer='adam', loss='mse', metrics=['mae'])
model.fit(X, y, epochs=10, batch_size=2, verbose=2)
prediction = model.predict(X) # I want to output a list of numbers
print(prediction)
现在,我的预测正在输出一个非常长的列表,其中包含相同的值,我认为这是一个预测。它看起来像这样:
[[62.449333]
[62.449333]
[62.449333]
...
[62.449333]
[62.449333]
[62.449333]]
我想要一个不是预测的列表,而更像是全新数字列表的 GAN 输出。另外,我不确定为什么这个预测会输出很长的列表。
数据看起来像这样,为了简洁起见,它被缩短了:
[64, 76, 64, 75, 64, 76, 64, 75, 64, 76, 64, 71, 64, 74, 64, 72, 69, 64, 45, 64, 52]
当 n_steps = 1 时,x 列车如下所示:
[[64], [76], [64], [75], [64], [76], [64], [75], [64], [76], [64], [71], [64], [74]]
y 看起来像这样,每个都是相应 x 列车的预期输出:
[76, 64, 75, 64, 76, 64, 75, 64, 76, 64, 71, 64, 74, 64]
任何帮助将不胜感激!
【问题讨论】:
-
LSTM 的输入形状为
[batch, timesteps, feature],而您提供的是单个数字。 -
Softmax激活用于多类分类,我相信这是一个回归任务。 -
是的,我将其更改为线性并在那里解决了一些问题。我在 LSTM 中输入一个数字是什么意思?
-
表示需要将输入改为:
model.add(LSTM((256,), activation='relu', return_sequences=True)) -
我们可以查看您的训练数据吗?你的 x 输入和 y 输出标签是什么样的?
标签: python tensorflow machine-learning lstm