Подготовка и определение входных данных LSTM (Python) - PullRequest
0 голосов
/ 14 октября 2019

Есть данные с плавающей точкой, соответствующие каждому временному шагу. Каждая запись данных представляет собой массив из 1000 чисел с плавающей запятой. Время не записывается, но составляет 0,1 с между каждой записью данных в массиве.

Я хочу подготовить и сохранить данные в соответствующем контейнере и передать их в модель LSTM.

Один раз безуказав точную длительность 0,1 с и снова с учетом продолжительности.

Что я сделал:

Я прочитал данные из файла .mat и добавил каждый массив из 1000 чисел с плавающей точкой в ​​список:

max_Value = []
min_Value = []
scale = 2.6
X_Data=[]
Y_Data=[]
epochs_Num = 10
batch_Num = 64
name_Model = f'{LSTM_{int(time.time())}'

for i_Path in origin_Data_Path:
    mat_Data = loadmat(i_Path)
    data     = mat_Data['data']
    X_Data.append(data[:,0])
    Y_Data.append(data[:,1])
 ...

opt = tf.keras.optimizers.Adam(lr=0.001,decay=1e-6)
ls  = tf.keras.losses.sparse_categorical_crossentropy

tensorboard = TensorBoard(log_dir=f'logs/{name_Model}')

myModel.compile(loss=ls,optimizer=opt,metrics=['accuracy'])

history = myModel.fit(X_Data,
                      labels_Categorical,
                      batch_size=batch_Num,
                      epochs=epochs_Num,
                      validation_split=0.2,
                      callbacks= [tensorboard]  )

myModel.save("myMod.h5")

Ошибка:

  File "C:\Python\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile
    execfile(filename, namespace)

  File "C:\Python\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/Light/Desktop/Gesture/Test01.py", line 139, in <module>
    callbacks= [tensorboard]  )

  File "C:\Python\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 728, in fit
    use_multiprocessing=use_multiprocessing)

  File "C:\Python\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 224, in fit
    distribution_strategy=strategy)

  File "C:\Python\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 516, in _process_training_inputs
    steps=steps_per_epoch)

  File "C:\Python\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 2472, in _standardize_user_data
    exception_prefix='input')

  File "C:\Python\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training_utils.py", line 565, in standardize_input_data
    'with shape ' + str(data_shape))

  ValueError: Error when checking input: expected lstm_input to have 3 dimensions, but got array with shape (1000, 1)

X_Data;структура

Структура данных.

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Как я понял, контейнер должен быть в форме N-мерного массива. Проблема с формой ввода в модель решена. Но есть проблемы с низкой точностью.

0 голосов
/ 14 октября 2019

Это потому, что вам нужно дать ему возможность ввода данных. Вы дали ему (1000, 1), что соответствует одному образцу ваших данных. Керас хочет это как (batch/samples, time, channels), что для вас будет (number of samples, 1000, 1). Это 3 ожидаемых измерения.

Проверьте, как вы строите свои входные данные. Вам не нужно создавать пакеты самостоятельно, fit() разделит входные данные на пакеты такого размера для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...