layers.LSTM(128, input_shape=(None, 13)),
layers.Dense(64, activation="relu"),
layers.Dense(32, activation="relu"),
layers.Dense(10, activation="softmax"),
]
)
# Компиляция модели
model.compile(
optimizer=keras.optimizers.Adam(learning_rate=0.001),
loss=keras.losses.CategoricalCrossentropy(),
metrics=["accuracy"],
)
# Загрузка звукового файла
audio_file = tf.io.read_file("audio.wav")
audio, _ = tf.audio.decode_wav(audio_file)
audio = tf.squeeze(audio, axis=-1)
audio = tf.cast(audio, tf.float32)
# Разбивка на фрагменты
frame_length = 640
frame_step = 320
audio_length = tf.shape(audio)[0]
num_frames = tf.cast(tf.math.ceil(audio_length / frame_step), tf.int32)
padding_length = num_frames * frame_step – audio_length
audio = tf.pad(audio, [[0, padding_length]])
audio = tf.reshape(audio, [num_frames, frame_length])
# Извлечение признаков MFCC
mfccs = tf.signal.mfccs_from_log_mel_spectrograms(
tf.math.log(tf.abs(tf.signal.stft(audio))),
audio.shape[-1],
num_mel_bins=13,
dct_coefficient_count=13,
)
# Подготовка данных для обучения
labels = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "zero"]
label_to_index = dict(zip(labels, range(len(labels))))
index_to_label = dict(zip(range(len(labels)), labels))
text = "one two three four five six seven eight nine zero"
target = tf.keras.preprocessing.text.one_hot(text, len(labels))
X_train = mfccs[None, …]
y_train = target[None, …]
# Обучение модели
history = model.fit(X_train, y_train, epochs=10)
# Предсказание результатов
predicted_probs = model.predict(X_train)
predicted_indexes = tf.argmax(predicted_probs, axis=-1)[0]
predicted_labels = [index_to_label[i] for i in predicted_indexes]
# Вывод результатов
print("Predicted labels:", predicted_labels)
Этот код реализует автоматическое распознавание речи с помощью нейросети на основе TensorFlow и Keras. Первым шагом определяется архитектура нейросети с помощью Keras Sequential API. В данном случае используется рекуррентный слой LSTM, принимающий на вход последовательность участков звука длиной 13. Затем идут несколько полносвязных слоев с функцией активации relu и один выходной слой с функцией активации softmax, выдающий вероятности для каждого класса речи.
Далее модель компилируется с помощью метода compile. Оптимизатором выбран Adam с коэффициентом обучения 0.001, функцией потерь – категориальная кросс-энтропия, а в качестве метрики используется точность классификации.