0

私はニューラルネットワークを構築して曲を作ります。私は1曲1行からのすべてのノートを持って一つのファイルには、1つの音符に対応しています多次元入出力を使用してKerasモデルを構築するにはどうすればよいですか?

0 0 0.05511 0.78740 
0 0 0.07874 0.50393 
0 0 0.71653 1 
0 0 0.50393 0 
.. .. .. .. 

私は、ニューラルネットワークに10最初のノートにを与えたいと私はそれが次のノートを与えたい 、出力として10音符の後に演奏されなければならない。

私は最初と最後の層、私が持っているので(高密度、LSTMを...)を構築する方法を知りません。しかし:

  1. 10x4寸法の入力(4列と10行)。
  2. 出力1x4の寸法(1行4列)。
    model = Sequential() 
    model.add(Dense(10, activation='relu',input_shape = (10,4))) 
    model.add(Dense(4, activation='relu')) 
    

    はあなたの助けをありがとう:

このは(正確に私のデータを読み取ることはありません)私のコードの始まりです。

答えて

0

これは、反復または長期の短期記憶ネットワークで最もよく解決されるシーケンス予測の問題です。これは教師機械学習の問題ですが、あなたのデータセット中には、ラベルを持っていないことを、

from keras.models import Sequential 
from keras.layers import LSTM, Dense, Dropout 
import numpy as np 

#assuming all 4 columns correspond to 1 song 
data_dim = 4 
#so one song would be 10x4 2D array 
number_of_notes_per_song = 10 
nsongs_train = 100 
#tunable parameter 
batch_size = 32 
epochs = 5 

# I generated dummy data, but you have your own... 
x_train = np.random.random((nsongs_train, number_of_notes_per_song, data_dim)).reshape(nsongs_train*number_of_notes_per_song,data_dim) 

#this is a supervised learning problem, but your dataset has no labels.. 
#we can use last note in each song as a label when training LSTM 
X = x_train[np.mod(np.arange(x_train.shape[0]),number_of_notes_per_song)!=0].reshape(nsongs_train,number_of_notes_per_song-1,data_dim) 
y = x_train[::number_of_notes_per_song].reshape(nsongs_train,data_dim) 

model = Sequential() 
model.add(LSTM(32, input_shape=(number_of_notes_per_song-1, data_dim),return_sequences=True)) 
model.add(Dropout(0.2)) 
model.add(LSTM(64)) 
model.add(Dropout(0.2)) 
model.add(Dense(data_dim, activation='softmax')) 
model.compile(loss='categorical_crossentropy', optimizer='adam') 

model.fit(X,y,batch_size=batch_size, epochs=epochs) 

#predict on unseen data, expects tensors of shape (None, number_of_notes_per_song-1, data_dim) 
model.predict(...) 

注:

良いスターターことができます後。各曲の最後の音符をラベルとして使用して、この問題を回避することができます。これにより、シーケンスの長さを効果的に1音ずつ減らすことができます。

あなたの曲に何百もの音符が含まれていた場合は、LSTMにサブシーケンスで入力し、曲の終わりまで状態をリセットしないことをお勧めします。 Hereは、Kerasを使用したステートフルなトレーニングの例です。

(次の文字だけではなく)曲全体を予測する必要がある場合は、すべてのLSTM層にreturn_sequences=Trueを設定し、出力にTimeDistributed緻密層を使用する必要があります。

+0

ありがとうございました。それは私をたくさん助けました。私はそれをし、それは働いた。しかし、どのようにしてNNが多くの曲を学習するように1つずつファイルを読み込むためにこのプログラムを修正することができますか? 1つのファイルは、何千もの音符を持つただ1つの曲ですから。だから私は何千もの音符で多くの曲を持っていることを考慮に入れて、入出力データの形をどうしたらよいか知りたいですか?ありがとう。 – Juan

関連する問題