【问题标题】:a problem using LSTM network (neural networks)使用 LSTM 网络(神经网络)的问题
【发布时间】:2020-07-03 05:56:28
【问题描述】:

我正在尝试使用 lstm 创建扬声器分类系统(我正在尝试让网络区分扬声器之间的差异)。 这是我创建的模型:

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 filterbank 能量)。 我还有数组“标签”,它的长度也是 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)

请帮忙!!!

【问题讨论】:

    标签: tensorflow keras neural-network lstm


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的帮助。我做了你所说的,它确实改变了输出大小,但我仍然需要弄清楚如何使用生成器正确地提供数据,我正在努力解决这个问题..
    • 在 RAM 中加载大数据集通常会产生问题,并且使用生成器生成数据因数据而异。在您的情况下,首先要回答它,我需要了解您的数据是如何在目录级别和文件类型(功能、标签)上组织的。您也可以点击链接 [keras.io/api/preprocessing/image/] [tensorflow.org/api_docs/python/tf/keras/utils/Sequence]
    • 当然。我已经使用pickle上传了这两个文件。这是地址:gofile.io/d/atdczX
    • 好的,我得到了你的数据 where feature = (256, 39, 40) , labels = (256, 4) 根据数据的形状,我假设它只有一批大小256 .现在这是您在将数据输入模型或将完整数据加载到 RAM 时遇到问题的问题
    • 喂给模型是问题
    猜你喜欢
    • 2022-08-15
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 2020-02-25
    • 2017-05-27
    • 2013-10-09
    • 2012-08-05
    • 2015-04-18
    相关资源
    最近更新 更多