簡體   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