【发布时间】:2020-06-23 12:28:37
【问题描述】:
我正在尝试使用简单的 Keras 顺序模型创建用于音频识别的数据集。
这是我用来创建模型的函数:
def dnn_model(input_shape, output_shape):
model = keras.Sequential()
model.add(keras.Input(input_shape))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation = "relu"))
model.add(layers.Dense(output_shape, activation = "softmax"))
model.compile( optimizer='adam',
loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),
metrics=['acc'])
model.summary()
return model
我正在使用这个 Generator 函数生成我的训练数据:
def generator(x_dirs, y_dirs, hmm, sampling_rate, parameters):
window_size_samples = tools.sec_to_samples(parameters['window_size'], sampling_rate)
window_size_samples = 2**tools.next_pow2(window_size_samples)
hop_size_samples = tools.sec_to_samples(parameters['hop_size'],sampling_rate)
for i in range(len(x_dirs)):
features = fe.compute_features_with_context(x_dirs[i],**parameters)
praat = tools.praat_file_to_target( y_dirs[i],
sampling_rate,
window_size_samples,
hop_size_samples,
hmm)
yield features,praat
变量x_dirs 和y_dirs 包含标签和音频文件的路径列表。我总共有 8623 个文件来训练我的模型。这就是我训练模型的方式:
def train_model(model, model_dir, x_dirs, y_dirs, hmm, sampling_rate, parameters, steps_per_epoch=10,epochs=10):
model.fit((generator(x_dirs, y_dirs, hmm, sampling_rate, parameters)),
epochs=epochs,
batch_size=steps_per_epoch)
return model
我现在的问题是,如果我传递所有 8623 文件,它将在第一个 epoch 中使用所有 8623 文件来训练模型,并在第一个 epoch 之后抱怨它需要 steps_per_epoch * epochs 批次来训练模型。
我只用切片列表的 8623 个文件中的 10 个对此进行了测试,但 Tensorflow 抱怨说需要 100 个批次。
那么我如何让我的生成器产生最有效的数据?我一直认为steps_per_epoch 只是限制了每个 epoch 接收的数据。
【问题讨论】:
标签: python tensorflow keras