Нейросети начало - страница 3



]

)

# Компиляция модели

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, функцией потерь – категориальная кросс-энтропия, а в качестве метрики используется точность классификации.

Затем загружается звуковой файл в формате wav, который декодируется с помощью tf.audio.decode_wav и преобразуется в числовые значения float32. Далее происходит разбиение файла на фрагменты длиной 640 с шагом 320. Если файл не делится на равные фрагменты, то добавляется заполнение.

Далее происходит извлечение признаков MFCC (Mel-frequency cepstral coefficients) из каждого фрагмента звука с помощью функции tf.signal.mfccs_from_log_mel_spectrograms. Полученные признаки используются для обучения модели.

Для обучения модели необходимо подготовить данные. В данном случае используется текст с указанием всех возможных классов и соответствующая метка для каждого класса. Для удобства преобразуется текст в one-hot кодировку с помощью метода tf.keras.preprocessing.text.one_hot. Затем подготовленные данные передаются в модель для обучения с помощью метода fit.

После обучения модели предсказываются результаты на тех же данных с помощью метода predict. Выбирается индекс с максимальной вероятностью и соответствующий ему класс.

В конце выводятся предсказанные метки классов.


3. Пример кода «Рекомендательная система».