繁体   English   中英

tf.keras (RNN) 层在运行 model.fit() 时出现问题

[英]tf.keras (RNN) Layer issues when running model.fit()

我正在构建一个 RNN 来使用 TensorFlow、Pandas 和 Keras 分析运动捕捉 (MoCap) 数据。

关于我的数据:

  • 数据通过pandas.read_csv ,形状为(832, 165)
  • 每行表示一个运动序列中的一整帧数据(832帧)
  • 每列表示一个关节的旋转数据(共 165 个关节)

我试图一次输入一行数据。 输出应该是运动序列中的下一帧。 运行model.fit时,我不断遇到不同类型的错误。

我附上了一系列照片,代表了使模型工作的不同尝试。 如果有人可以就为什么它不起作用以及如何修复提供一些指导,我将不胜感激。

作为旁注,我的代码的每个版本都不同。 只要它最终工作,我就可以使用任何东西,所以在提供反馈时,如果你能确定你正在谈论我的代码的哪个版本?

使用tf.data.Dataset作为输入

版本 1 代码/输出

版本 2 代码/输出

版本 3: [代码] [输出]

使用 Pandas 数组作为输入和目标

版本 4 代码/输出

版本 5 代码/输出

使用代码 4作为故障排除的基础,我注意到您将不兼容的形状传递给图层。

这一行model.add(keras.layers.InputLayer(input_shape = (N_TIMESTEPS, N_FEATURES)))期望您的数据具有相同的形状。 而你的数据有(832, 165)这是第一指标和N_FEATURESN_SAMPLES次,在N_TIMESTEPS丢失

首先,您应该创建一个修改后的数据集,该数据集将生成(N_SAMPLES, N_TIMESTEPS, N_FEATURES)的形状。

以下是生成虚拟数据集的示例:

data = tf.random.normal((N_SAMPLES, N_TIMESTEPS, N_FEATURES))
target = tf.random.normal((N_SAMPLES, N_TIMESTEPS, N_FEATURES))

数据中的N_TIMESTEPS在 LSTM 中很重要,因为它决定了每次更新要考虑多少 TIME_STEPS。

这是用于在Google Colab 中模拟成功执行的完整代码

%tensorflow_version 2.x  # To ensure latest Tensorflow version in Google Colab

import tensorflow as tf
import tensorflow.keras as keras

print(tf.__version__) # Tensorflow 2.2.0-rc3

BATCH_SIZE = 1
N_TIMESTEPS = 10
#Data is obtained through pandas.read_csv and has a shape of (832, 165)
#Each row denotes a whole frame of data in a movement sequence (832 frames)
#Each column denotes the rotational data for a joint (165 joints total)
# N_SAMPLES = data.values.shape[0]
# N_FEATURES = data.values.shape[1]
N_SAMPLES  = 832
N_FEATURES = 165

def get_compiled_model():
  model = keras.Sequential()
  model.add(keras.layers.InputLayer(input_shape = (N_TIMESTEPS, N_FEATURES)))
  model.add(keras.layers.LSTM(35, activation = 'relu', return_sequences = True))
  model.add(keras.layers.LSTM(35, activation = 'relu', return_sequences = True))
  model.add(keras.layers.Dense(165, activation = 'tanh'))

  model.compile(optimizer = 'adam',
                loss = 'mse',
                metrics = ['accuracy'])

  return model

model = get_compiled_model()
model.summary()

data = tf.random.normal((N_SAMPLES, N_TIMESTEPS, N_FEATURES))
target = tf.random.normal((N_SAMPLES, N_TIMESTEPS, N_FEATURES))

model.fit(data, target, epochs = 15, batch_size = BATCH_SIZE, shuffle = False)

希望这对你有帮助。

您可以在此链接中阅读有关使用 RNNTensorflow Keras 指南的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM