и проверил, работает нормально.
но когда я конвертирую ее в tflite и пытаюсь загрузить на Android, при загрузке возникает ошибка.
журналы ошибок.
java.lang.IllegalStateException: внутренняя ошибка: неожиданный сбой при подготовке тензорных выделений: tensorflow/lite/kernels/rfft2d.cc:117 IsPowerOfTwo(fft_length_data[1]) неверно.
Не удалось подготовить узел номер 16 (RFFT2D).
Не удалось применить делегат TensorFlow Lite по умолчанию, индексированный по адресу 0.
в org.tensorflow.lite.NativeInterpreterWrapper.allocateTensors(Native Метод)
at org.tensorflow.lite.NativeInterpreterWrapper.init(NativeInterpreterWrapper.java:134)
at org.tensorflow.lite.NativeInterpreterWrapper.(NativeInterpreterWrapper.java:58)
at org.tensorflow.lite.NativeInterpreterWrapperExperimental.(NativeInterpreterWrapperExperimental.java:32)
на org.tensorflow.lite.Interpreter.(Interpreter.java:202)
и полный код:
Код: Выделить всё
def compute_mfcc(chunk1, chunk2, chunk3, sample_rate=16000, num_mfcc=20):
padded_chunk = tf.concat([chunk1[-len(chunk1)//2:], chunk2, chunk3[:len(chunk3)//2]], axis=-1)
padded_chunk_tensor = tf.convert_to_tensor(padded_chunk, dtype=tf.float32)
stft = tf.signal.stft(padded_chunk_tensor, frame_length=128, frame_step=64)
magnitude_spectrograms = tf.abs(stft)
num_spectrogram_bins = magnitude_spectrograms.shape[-1]
lower_edge_hertz, upper_edge_hertz, num_mel_bins = 80.0, 7600.0, 40
linear_to_mel_weight_matrix = tf.signal.linear_to_mel_weight_matrix(
num_mel_bins, num_spectrogram_bins, sample_rate, lower_edge_hertz, upper_edge_hertz)
mel_spectrograms = tf.tensordot(magnitude_spectrograms, linear_to_mel_weight_matrix, 1)
mel_spectrograms.set_shape(magnitude_spectrograms.shape[:-1].concatenate(linear_to_mel_weight_matrix.shape[-1:]))
log_mel_spectrograms = tf.math.log(mel_spectrograms + 1e-9)
mfccs = tf.signal.mfccs_from_log_mel_spectrograms(log_mel_spectrograms)[..., :num_mfcc]
mfccs_mean = tf.reduce_mean(mfccs, axis=0)
mfccs_std = tf.math.reduce_std(mfccs, axis=0)
normalized_mfccs = (mfccs - mfccs_mean) / (mfccs_std + 1e-9)
return normalized_mfccs[1]
(я тоже пробовал оптимизацию)
Код: Выделить всё
class MFCCModel(tf.Module):
def __init__(self):
super(MFCCModel, self).__init__()
@tf.function(input_signature=[tf.TensorSpec(shape=[3, 320], dtype=tf.float32)])
def __call__(self, inputs):
chunk1, chunk2, chunk3 = tf.unstack(inputs)
mfccs = compute_mfcc(chunk1, chunk2, chunk3)
return mfccs
# Create the model
model = MFCCModel()
converter = tf.lite.TFLiteConverter.from_concrete_functions([model.__call__.get_concrete_function()])
converter.target_spec.supported_ops = [
tf.lite.OpsSet.TFLITE_BUILTINS,
tf.lite.OpsSet.SELECT_TF_OPS
]
converter.experimental_new_converter = True
tflite_model = converter.convert()
with open('mfcc_model.tflite', 'wb') as f:
f.write(tflite_model)
Код: Выделить всё
ConcreteFunction Input Parameters:
inputs (POSITIONAL_OR_KEYWORD): TensorSpec(shape=(3, 320), dtype=tf.float32, name=None)
Output Type:
TensorSpec(shape=(20,), dtype=tf.float32, name=None)
Captures:
None
[img]https: //i.sstatic.net/X6J5xRcg.png[/img]
пожалуйста, проверьте эту ошибку и дайте какие-либо подсказки по ее устранению..
спасибо
изменено fft_lenth другие значения 256, 256 * 2,,,
каждая попытка дает одни и те же ошибки..
изменил библиотеки tflite на последнюю версию
Подробнее здесь: https://stackoverflow.com/questions/788 ... -data1-was
Мобильная версия