Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 运行model.fit()时tf.keras(RNN)层出现问题_Python_Pandas_Keras_Recurrent Neural Network_Tensorflow2.0 - Fatal编程技术网

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

Python 运行model.fit()时tf.keras(RNN)层出现问题,python,pandas,keras,recurrent-neural-network,tensorflow2.0,Python,Pandas,Keras,Recurrent Neural Network,Tensorflow2.0,我正在构建一个RNN,使用TensorFlow、Pandas和Keras分析运动捕捉(MoCap)数据 关于我的数据: 数据通过pandas.read_csv获取,形状为 (832165) 每行表示移动序列中的一整帧数据(832帧) 每列表示关节的旋转数据(总共165个关节) 我试图一次一行输入数据。输出应该是移动序列中的下一帧。在运行model.fit时,我不断遇到不同类型的错误 我附上了一系列的照片,代表了不同的尝试,使模型的工作。如果有人能提供一些指导,说明为什么它不起作用以及如何修复

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

关于我的数据:

  • 数据通过pandas.read_csv获取,形状为 (832165)
  • 每行表示移动序列中的一整帧数据(832帧)
  • 每列表示关节的旋转数据(总共165个关节)
我试图一次一行输入数据。输出应该是移动序列中的下一帧。在运行
model.fit
时,我不断遇到不同类型的错误

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

作为旁注,我的代码的每个版本都是不同的。我可以使用any,只要它最终能够工作,那么在提供反馈时,您是否可以确定您所谈论的是我的代码的哪个版本

使用
tf.data.Dataset
作为输入

第3版:

将熊猫数组用于输入和目标


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

这一行
model.add(keras.layers.InputLayer(input\u shape=(N\u TIMESTEPS,N\u FEATURES))
希望您的数据具有相同的形状。 虽然您的数据有
(832165)
,这是第一个索引上的N_样本和N_特征,但N_时间步缺失

首先,您应该创建一个修改过的数据集,该数据集将生成
(N\u个样本、N\u个时间步、N\u个特征)

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

data = tf.random.normal((N_SAMPLES, N_TIMESTEPS, N_FEATURES))
target = tf.random.normal((N_SAMPLES, N_TIMESTEPS, N_FEATURES))
<> P> >在LSTM中,<强> > NyTimeStase>在LSTM中很重要,因为它决定每次更新要考虑多少时间步骤。

以下是在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)
希望这对你有帮助


在本文中,您可以使用RNN阅读更多有关Tensorflow Keras指南的信息

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

这一行
model.add(keras.layers.InputLayer(input\u shape=(N\u TIMESTEPS,N\u FEATURES))
希望您的数据具有相同的形状。 虽然您的数据有
(832165)
,这是第一个索引上的N_样本和N_特征,但N_时间步缺失

首先,您应该创建一个修改过的数据集,该数据集将生成
(N\u个样本、N\u个时间步、N\u个特征)

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

data = tf.random.normal((N_SAMPLES, N_TIMESTEPS, N_FEATURES))
target = tf.random.normal((N_SAMPLES, N_TIMESTEPS, N_FEATURES))
<> P> >在LSTM中,<强> > NyTimeStase>在LSTM中很重要,因为它决定每次更新要考虑多少时间步骤。

以下是在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)
希望这对你有帮助

在本文中,您可以使用RNN阅读更多有关Tensorflow Keras指南的信息