使用 LSTM 网络(神经网络)的问题
a problem using LSTM network (neural networks)
我正在尝试使用 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 位不同的演讲者。
在我的数据集中,我有数组 'features' (256 个语音段的长度为 256)。
对于 'features' 中的每个片段,我有 39 个向量来表示每个片段,每个向量的大小为 40。
这 39 个向量中的每一个都是从不同的时间 window 中提取的。 (我使用了 log mel filterbank 能量)。
我还有数组 'lables' ,它的长度也是 256,并且包含每个段的标签。
我为此使用了 'to_categorical':
labels = tf.keras.utils.to_categorical(labels, num_classes=4)
我尝试使用发电机将其馈送到网络,但没有成功。
这是我使用的class:
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)
请帮忙!!!
如果我猜对了,你想分类哪个输入是由哪个说话者说的。
在那种情况下,你的最后一层应该有一个形状 (batch_size, numOfClasses) 或 (39, 4)
但是如果你仔细查看摘要,最后一层的输出形状是 (39, 40, 4)
为了获得正确的形状,从最后一个 LSTM 层中删除参数 return_sequences=True。
我正在尝试使用 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 位不同的演讲者。 在我的数据集中,我有数组 'features' (256 个语音段的长度为 256)。 对于 'features' 中的每个片段,我有 39 个向量来表示每个片段,每个向量的大小为 40。 这 39 个向量中的每一个都是从不同的时间 window 中提取的。 (我使用了 log mel filterbank 能量)。 我还有数组 'lables' ,它的长度也是 256,并且包含每个段的标签。 我为此使用了 'to_categorical':
labels = tf.keras.utils.to_categorical(labels, num_classes=4)
我尝试使用发电机将其馈送到网络,但没有成功。 这是我使用的class:
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)
请帮忙!!!
如果我猜对了,你想分类哪个输入是由哪个说话者说的。 在那种情况下,你的最后一层应该有一个形状 (batch_size, numOfClasses) 或 (39, 4)
但是如果你仔细查看摘要,最后一层的输出形状是 (39, 40, 4)
为了获得正确的形状,从最后一个 LSTM 层中删除参数 return_sequences=True。