首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入数据准备和定义(Python)

输入数据准备和定义(Python)
EN

Stack Overflow用户
提问于 2019-10-14 08:47:34
回答 2查看 115关注 0票数 0

有一个浮动数据对应于每个时间步骤。每个记录数据都是由1000个浮点数组成的数组。时间不是记录的,而是数组中每一次数据记录之间的0.1秒。

我想准备并将数据存储在一个适当的容器中,并将其传递给LSTM模型。

一次没有指定精确的0.1秒持续时间,然后再考虑持续时间。

我所做的:

我从.mat文件中读取数据,并将每个1000个浮动数组追加到列表中:

代码语言:javascript
复制
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")

错误:

代码语言:javascript
复制
  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)

数据;结构

数据结构。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-14 09:02:05

这是因为您需要给它一个能够批处理的输入。您已经给出了(1000, 1),它似乎与您的数据的单个样本相对应。Keras希望它成为(batch/samples, time, channels),对您来说,它将是(number of samples, 1000, 1)。这些都是预期的三个维度。

检查如何构造输入数据。您不需要自己编写批处理,fit()会为您将输入数据拆分为这些大小的批。

票数 0
EN

Stack Overflow用户

发布于 2019-10-15 05:55:51

正如我意识到的,容器应该是N维数组的形式。解决了模型输入形状问题。但也存在精度不高的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58373096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档