使用LSTM网络(神经网络)的问题

时间:2020-07-03 05:56:28

标签: tensorflow keras neural-network lstm

im试图使用lstm创建说话者歧视系统(im试图让网络分辨出说话者之间的区别)。 这是我创建的模型:

model = Sequential()
model.add(LSTM(768, batch_input_shape=(39, 40, 1), return_sequences=True))
model.add(Dense(256))
model.add(LSTM(768, return_sequences=True))
model.add(Dense(256))
model.add(LSTM(768, return_sequences=True))
model.add(Dense(4))

有4个不同的扬声器。 在我的数据集中,我拥有数组“功能”(256个语音段的长度为256个)。 对于“功能”中的每个分段,我有39个向量代表每个分段,并且这些向量中的每个大小均为40。 这39个向量中的每个向量都是从不同的时间窗口提取的。 (我使用了log mel滤波器组能量)。 我也有数组“标签”,它的长度也是256,包含每个段的标签。 我为此使用了“ to_categorical”:

labels = tf.keras.utils.to_categorical(labels, num_classes=4)

我尝试使用生成器将其馈送到网络,但没有成功。 这是我使用的课程:

class KerasBatchGenerator(object):

    def __init__(self, features,  batch_size, labels):
        self.features = features
        self.batch_size = batch_size
        self.labels = labels

    def generate(self):
        while True:
            for i in self.labels:  
                for j in self.features: 
                    temp = [j, i]
                 #   temp = np.expand_dims(temp, axis=1)
                    temp = np.expand_dims(temp, axis=2)
                    yield tuple(temp)

我用来运行网络的代码是:

train_data_generator = KerasBatchGenerator(features, batch_size, labels)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit_generator(train_data_generator.generate(), 100, 1)

请帮助!

1 个答案:

答案 0 :(得分:0)

如果我猜对了,您想对哪个扬声器讲话中的哪个输入进行分类。 在这种情况下,您的最后一层应具有形状(batch_size,numOfClasses)或(39,4)

但是如果您仔细查看摘要,则最后一层的输出形状为(39,40,4)

要获得正确的形状,请从最后一个LSTM层中删除参数return_sequences = True。

相关问题