首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪个形状应该有LSTM神经网络的输入和输出数据?

哪个形状应该有LSTM神经网络的输入和输出数据?
EN

Stack Overflow用户
提问于 2017-12-31 08:14:54
回答 2查看 942关注 0票数 3

对于为具有LSTM层的NN创建数据的方法,我有一个问题。我有,很多文件,,包含数百行。每个文件代表一首歌每一行代表一个带有4个值的注释。我希望NN用读取注释,一个由10条音符组成的序列,这样它就可以预测它们的下一个音符了。如果需要的话,我们可以把每首歌的音符数定为5000。

因此,我只想知道哪个塑造了应该拥有的输入和输出数据,以及如何定义第一个LSTM层。

代码语言:javascript
复制
model = Sequential()
model.add(LSTM(32, input_shape=(5000, 4),return_sequences=True))

总结:

  • 一个文件有5000行和4列,代表一首歌。
  • 文件中的一行表示一个带有4个值的注释。

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-31 18:49:32

第一层的输入形状应该是(None, 10, 4)。模型的输出形状为(None, 4)。我使用None作为批处理大小。

我编写了一个简单的LSTM作为示例:

代码语言:javascript
复制
import numpy as np
from keras.layers import LSTM
from keras.models import Sequential

batch_size = 32
window_length = 10
note_dim = 4
n_samples = 5000

# Input data. TODO: Slide window and modify it to use real data
x = np.ones(shape=(n_samples, window_length, note_dim))
y = np.ones(shape=(n_samples, note_dim))

# Define model
model = Sequential()
model.add(LSTM(note_dim, input_shape=(window_length, note_dim))) # The batch dimension is implicit here

model.compile('sgd', 'mse')
model.fit(x=x, # Batch input shape is: (None, window_length, note_dim)
          y=y, # Batch output shape is: (None, note_dim)
          batch_size=batch_size)

如果您想要一个更复杂的模型(即两个LSTM层),您可以这样定义它:

代码语言:javascript
复制
# ...
# Define model
hidden_size = 50
model = Sequential()
model.add(LSTM(hidden_size, input_shape=(window_length, note_dim), return_sequences=True)) # The batch dimension is implicit here
model.add(LSTM(note_dim))
# ...

更新:回答您的第一个评论。

x应该在滑动一个窗口后包含所有的歌曲。例如,假设您有一个包含所有歌曲的形状为songs的变量(n_songs, notes_per_song, note_dim)。然后,您可以创建xy,如下所示:

代码语言:javascript
复制
# ...
# Input data    
# Suppose that variable ´songs´ is an array with shape: (n_songs, notes_per_song, note_dim). 
samples_per_song = notes_per_song-window_length
n_samples = n_songs*samples_per_song
x = np.zeros(shape=(n_samples, window_length, note_dim))
y = np.zeros(shape=(n_samples, note_dim))
for n, song in enumerate(songs):
    for i in range(samples_per_song):
        x[i+n*samples_per_song, :, :] = song[i:(i+window_length), :]
        y[i+n*samples_per_song, :, :] = song[i+window_length, :] # note that you want to predict
# ...
票数 1
EN

Stack Overflow用户

发布于 2017-12-31 18:30:29

我希望NN用10个音符的序列来读取笔记,这样它就可以预测它们的下一个音符了。

我从未使用过keras,但我认为您应该首先将这些注释转换为I。例如:(aa,bb,cc,dd)为1,(ab,bb,cc,dd)为2等等。

然后读取编码器的10个ids/便笺,然后添加一个投影,将最终状态投影到第11个便笺。如果你想用歌曲中任何音符中的10个音符来测试模型,那么你就训练第二个到第11个音符,并把第12个音符作为投射后的目标。以此类推,直到最后一个音符成为目标。这是为一首歌,并重复这对所有的歌曲。

你绝对可以通过身份证拿回笔记。您可以构建一个词汇表来来回传递它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48041000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档