Приведение строки к плавающей не поддерживается — Автоэнкодер шумоподавления для данных временных рядов

#python #tensorflow #deep-learning #autoencoder

#питон #тензорный поток #глубокое обучение #автоэнкодер

Вопрос:

Я пытаюсь создать автоэнкодер шумоподавления для данных временных рядов. Но я получаю сообщение «Преобразование строки в float не поддерживается», когда пытаюсь обучить модель.

Данные, которые я использовал, имеют следующую форму:

 print(np.shape(noisy_samples))
print(np.shape(samples))
 

Вывод:

(98, 8000, 2) (98, 8000, 2)

Тип данных изменен на numpy array:

 data_noisy=np.array(noisy_samples)
data_pure=np.array(samples)
print(type(data_pure))
print(type(data_noisy))
 

Вывод:

<класс ‘numpy.ndarray’> <класс ‘numpy.ndarray’>

Модель автоэнкодера:

 import tensorflow.keras
from tensorflow.keras.models import Sequential, save_model, Model
from tensorflow.keras.layers import Conv1D, Conv1DTranspose, Input, MaxPooling1D, Flatten, Dense, Reshape, UpSampling1D
from tensorflow.keras.constraints import max_norm
import matplotlib.pyplot as plt
import numpy as np
import math

batch_size = 5
no_epochs = 5
train_test_split = 0.3
validation_split = 0.2
verbosity = 1
max_norm_value = 2.0
input_sig = Input(batch_shape=(1,8000,2))

x = Conv1D(16, 3, activation="relu", padding="same")(input_sig) 
#x = BatchNormalization()(x)
x = MaxPooling1D(2, padding="same")(x)
x = Conv1D(1, 3, activation="relu", padding="same")(x) 
#x = BatchNormalization()(x)
encoded = MaxPooling1D(2, padding="same")(x) 

encoder = Model(input_sig, encoded)


x = Conv1D(1, 3, activation="relu", padding="same")(encoded) 
#x = BatchNormalization()(x)
x = UpSampling1D(2)(x) 
x = Conv1D(16, 2, activation='relu', padding="same")(x) 
#x = BatchNormalization()(x)
x = UpSampling1D(2)(x) 
decoded = Conv1D(2, 3, activation='sigmoid', padding='same')(x) 
model = Model(input_sig, decoded)
model.summary()
model.compile(optimizer='adam', loss='binary_crossentropy')
model.fit(data_noisy, data_pure, epochs = no_epochs, batch_size =batch_size )
 

Вывод:

Модель: «model_1» _________________________________________________________________ Слой (тип) Параметр формы вывода #
================================================================= input_1 (InputLayer) [(1, 8000, 2)] 0
_________________________________________________________________ conv1d (Conv1D) (1, 8000, 16) 112
_________________________________________________________________ max_pooling1d (MaxPooling1D) (1, 4000, 16) 0
_________________________________________________________________ conv1d_1 (Conv1D) (1, 4000, 1) 49
_________________________________________________________________ max_pooling1d_1 (MaxPooling1 (1, 2000, 1) 0
_________________________________________________________________ conv1d_2 (Conv1D) (1, 2000, 1) 4
_________________________________________________________________ up_sampling1d (UpSampling1D) (1, 4000, 1) 0
_________________________________________________________________ conv1d_3 (Conv1D) (1, 4000, 16) 48
_________________________________________________________________ up_sampling1d_1 (UpSampling1 (1, 8000, 16) 0
_________________________________________________________________ conv1d_4 (Conv1D) (1, 8000, 2) 98
================================================================= Всего параметров: 311 Обучаемых параметров: 311 Нет-обучаемые параметры: 0 _________________________________________________________________ Эпоха 1/5 ————————————————————————— Обратная трассировка невыполненной ошибки (последний последний вызов) в () 46 model.summary() 47 model.compile(optimizer=’adam’, loss=’binary_crossentropy’) —> 48 model.fit(data_noisy, data_pure, epochs = no_epochs, batch_size =batch_size ) 49

6 кадров /usr/local/lib/python3.6/dist-packages/tensorflow/python/нетерпеливый / выполнить.py в quick_execute(op_name, num_outputs, inputs, attrs, ctx, name) 58 ctx.ensure_initialized() 59 тензоры = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name, —> 60 входов, attrs, num_outputs) 61, кроме ядра._NotOkStatusException как e: 62, если имя не равно None:

UnimplementedError: приведение строки к плавающей не поддерживается [[модель узла_1/ Приведение (определено в:48) ]] [Op:__вывод_поезд_функция_79115]

Стек вызовов функций: train_function

Я попытался проверить свои образцы данных, они не содержат никаких строковых значений.

Комментарии:

1. Вы уверены, что все значения в ваших массивах являются числовыми?

2. Пожалуйста, проверьте типы элементов вашего массива. Кажется, что по крайней мере один из них является строкой, и что ваши внутренние процессы принимают значение float . Большинство этих подпрограмм ожидают, что вы очистите входные данные; вам придется преобразовать в float перед вызовом.

Ответ №1:

Просто запустите проверку своих массивов, чтобы увидеть, где у вас может быть строковое значение. Сделайте что-то вроде (если arr это ваш массив):

 q = []   
for i in arr:
    try:
        q.append(np.float(i))
    except ValueError as e:
        q.append(np.nan)
baz = np.where(np.isnan(q))