LSTM输入数据准备和定义(Python)
每个时间步对应一个浮点数据。每个记录数据是由1000个浮点数组成的数组。不记录时间,但在阵列中每次记录数据之间的时间间隔为0.1秒 我希望准备数据并将其存储在适当的容器中,然后将其传递给LSTM模型 一次未指定精确的0.1秒持续时间,另一次考虑持续时间 我所做的: 我从.mat文件读取数据,并将每个1000浮点数组追加到列表中:LSTM输入数据准备和定义(Python),python,tensorflow,keras,lstm,spyder,Python,Tensorflow,Keras,Lstm,Spyder,每个时间步对应一个浮点数据。每个记录数据是由1000个浮点数组成的数组。不记录时间,但在阵列中每次记录数据之间的时间间隔为0.1秒 我希望准备数据并将其存储在适当的容器中,然后将其传递给LSTM模型 一次未指定精确的0.1秒持续时间,另一次考虑持续时间 我所做的: 我从.mat文件读取数据,并将每个1000浮点数组追加到列表中: max_Value = [] min_Value = [] scale = 2.6 X_Data=[] Y_Data=[] epochs_Num = 10 batch_
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)
文件“C:\Python\Anaconda3\lib\site packages\spyder\u kernels\customize\spyderrcustomize.py”,第827行,在runfile中
execfile(文件名、命名空间)
execfile中的文件“C:\Python\Anaconda3\lib\site packages\spyder\u kernels\customize\spyderrcustomize.py”,第110行
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“C:/Users/Light/Desktop/signature/Test01.py”,第139行,在
回调=[tensorboard])
文件“C:\Python\Anaconda3\lib\site packages\tensorflow\u core\Python\keras\engine\training.py”,第728行,在fit中
使用多处理=使用多处理)
文件“C:\Python\Anaconda3\lib\site packages\tensorflow\u core\Python\keras\engine\training\u v2.py”,第224行
分销(策略=策略)
文件“C:\Python\Anaconda3\lib\site packages\tensorflow\u core\Python\keras\engine\training\u v2.py”,第516行,进程\u培训\u输入
步长=步长(每个历元)
文件“C:\Python\Anaconda3\lib\site packages\tensorflow\u core\Python\keras\engine\training.py”,第2472行,在用户数据中
异常(前缀为“输入”)
标准化输入数据中的文件“C:\Python\Anaconda3\lib\site packages\tensorflow\u core\Python\keras\engine\training\u utils.py”,第565行
“带形状”+str(数据形状))
ValueError:检查输入时出错:预期lstm_输入有3个维度,但得到了形状为(1000,1)的数组
这是因为您需要给它一个能够成批处理的输入。您已经给了它
(1000,1)
,它似乎对应于您的一个数据样本。Keras希望它是(批次/样本、时间、频道)
,您可以使用(样本数,1000,1)
。这是预期的3个维度
检查您是如何构造输入数据的。您不需要自己制作批次,
fit()
将为您将输入数据拆分为这些大小的批次。因为我意识到容器应该是N维数组的形式。解决了模型输入形状的问题。但精确度较低存在问题。什么是批处理数?批处理数=64和纪元数=10这与之前发布的导致代码的问题不同。请在你的帖子中澄清新的错误是什么。在您之前,我们使用(1000,1)的形状。请提供一个明确的可复制版本的问题与最小的变化,请让我们可以在这个问题上的工作。第一篇文章已经更新。已添加有关Spyder控制台中显示的错误的其他信息。(除了LSTM输入形状参数外,我没有更改代码。‘只需尝试并出错’)请尝试将扩展数据的第三维扩展为1而不是无。这可能有点棘手,因为您正在使用列表。我强烈建议转换为数组。使用列表可能没有帮助,甚至可能是问题所在。myModel.add(LSTM(256,批处理输入形状=(14761000,1),activation='relu',return\u sequences=True))感谢您的回复。上面的语句也会导致错误。我可以请你为我的问题提供适当的例子吗?(我已经更新了第一篇帖子,请检查图片,谢谢)你能打印X_数据吗?shape和post outputX_数据是一个列表对象,没有shape属性。但我也将其转换为数据帧(--train_data=pd.DataFrame(X_data)--),结果是:(--print(train_data.shape)--(14761000)--)好的,X_数据列表的形状是什么,因为这是传递模型的,而不是pd之后发生的任何事情