gpt4 book ai didi

python - 需要 fit_generator() 的具体示例

转载 作者:行者123 更新时间:2023-11-30 10:00:01 26 4
gpt4 key购买 nike

我正在制作一个输入形状为 (56088,22050,1) 的语音识别模型,它作为一个整体可以从 .npy 文件(大小约为 5GB)加载到内存中,但我想弄清楚一个更好的方法。我遇到了 keras fit_generator() 方法,但大多数示例都是基于 mnist 并使用 ImageDataGenerator() 函数。我意识到我必须制作一个自定义生成器函数,但我不太确定如何制作。根据this线程中,我引用了他的生成器函数来制作类似的东西,但我仍然需要将整个数据加载到内存中,这需要很多时间。另外,我不确定这个程序是否会运行,因为在我运行它的前 20 分钟内它根本没有输出任何内容
还有其他出路吗?

import librosa
import glob
import tensorflow as tf
import os
import numpy as np


class_list, X_train, Y_train = [],[],[]
filename = "D:\\SpeechRecognitionData\\train\\audio\\"

class_names = os.listdir(filename)
print(class_names)

for classes in class_names:
if classes == '_background_noise_':
continue
else:
class_list.append(''.join(filename+classes))

print(class_list,"\n",len(class_list))


def create_X(address):
wave,sr = librosa.load(address)
wave.reshape(-1,1)
yield wave


def getLabel(filename):
base_name = os.path.basename(filename)
return base_name

def onehot(Y_train):
from sklearn import preprocessing
enc = preprocessing.OneHotEncoder()
Y_train = Y_train.reshape(-1,1)
enc.fit(Y_train)
Y_train = enc.transform(Y_train).toarray()
return Y_train


def execute(X_train, Y_train):
loop = 0
for i in class_list:
c=0
loop+=1
for file in glob.glob("".join(i+"\\*.wav")): # iterating through each .wav audio file in the directory to create training data
if np.array(list(create_X(file))).shape[0] == 22050:
c+=1
Y_train.append(class_names.index(getLabel(i)))
X_train.append(create_X(file))
if c%100==0:
print("{} files processed in loop {}".format(c,loop))

while 1:
for i in range(1558): # 36*1558 = 56088
if i%125==0:
print("i= "+str(i))
yield np.array(X_train[i*36:(i+1)*36]).reshape(X_train.shape[0],X_train.shape[1],1), onehot(np.array(Y_train[i*36:(i+1)*36]))


input_shape = (22050,1)

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv1D(16,activation='relu',input_shape=input_shape,kernel_size=(10)))
model.add(tf.keras.layers.MaxPool1D())
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Conv1D(32,activation='relu',kernel_size=(10)))
model.add(tf.keras.layers.MaxPool1D())
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Conv1D(16,activation='relu',kernel_size=(10)))
model.add(tf.keras.layers.MaxPool1D())
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dense(64,activation='relu'))
model.add(tf.keras.layers.Dense(30,activation='softmax'))

model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
generator = execute(X_train,Y_train)
model.fit_generator(generator,steps_per_epoch=56088//36,shuffle=True)
model.save("model.h5")

最佳答案

所以我通过查看这里的示例找到了答案 - https://github.com/tjh48/keras_generators/blob/master/keras_generator_example.ipynb

如果有人遇到这个,他们可以引用我的笔记本 https://github.com/DarshanDeshpande/Speech-Recognition/blob/master/SpeechRecognitionWithGenerators.ipynb

谢谢!

关于python - 需要 fit_generator() 的具体示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59407563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com