繁体   English   中英

LSTM的多个功能,多个类别,多个输出

[英]LSTM multiple features, multiple classes, multiple outputs

我正在尝试使用LSTM分类器根据我拥有的一些midi生成音乐。

LSTM具有两个功能,即音符的音高和音符的持续时间。

为了说明,我们认为我们有:

  • 螺距:[“ A”,“ B”,“ C”]

  • 持续时间:[“ 0.5”,“ 1”,“ 1.5”]

可以想象,生成的音符必须同时具有音高和持续时间。

我试图用MultiLabelBinarizer做到这一点。

from sklearn.preprocessing import MultiLabelBinarizer
labels = [[x,y] for x in all_pitches for y in all_durations]

mlb = MultiLabelBinarizer()
mlb_value = mlb.fit_transform(labels)

这将按预期划分类,但是我遇到的问题是在预测时出现的。

prediction = model.predict_proba(prediction_input)

indexes = np.argsort(prediction, axis=None)[::-1]
index1 = indexes[0]
index2 = indexes[1]

result1 = mlb.classes_[index1]
result2 = mlb.classes_[index2]

我需要音符同时具有音高和持续时间,因此这种方法似乎对我不起作用(我只获得相同的两个音高)。

我认为的另一件事是使用MultiOutputClassifier ,但是我似乎无法理解它们的区别,或者如何正确地实际使用此MultiOutputClassifier

感谢您的耐心配合,并为您提出的可能是愚蠢的问题感到抱歉。

您可以将LSTM输出提供给许多不同的层(通常是神经函数),从而导致不同的输出,然后在这些输出的每一个上同时训练模型:

from keras.models import Model
from keras.layers import Input, Dense, LSTM

# function definitions
lstm_function = LSTM(..args)
pitch_function = Dense(num_pitches, activation='softmax')
duration_function = Dense(num_durations, activation='softmax')
input_features = Input(input_dimensionality)

# function applications
lstm_output = lstm_function(input_features)
pitches = pitch_function(lstm_output)
durations = duration_function(lstm_output)

# model 
model = Model(inputs=[input_features], outputs=[pitches, durations])
model.compile(loss=['categorical_crossentropy', 'mse'], optimizer='RMSProp')

可以将其概括为任意信息流,并根据需要提供任意数量的层/输出。 请记住,对于每个输出,您需要定义一个相应的损耗(或None )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM