簡體   English   中英

如何使用 tf.data 在 tensorflow 管道中加載.npy 文件

[英]How to load .npy File in a tensorflow pipeline with tf.data

我正在嘗試在tf.data管道中使用np.load()從.npy 文件中讀取我的 X 和 y 數據。 但是如果我調用model.fit()會出現以下錯誤。 有人解決這個問題嗎? 我想我必須將 X_data 和 y_data 的形狀賦予tf.py_funciton 我正在使用 Tensorflow 2.4

錯誤:

Input 0 of layer sequential_13 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: (None, None)

描述:

train_filenames,train_label_filenames是每個.npy 文件的文件路徑列表。

所以print(train_filenames[0])顯示'E:\UserData\Mustermann\02_Data\X_Data\Sample0.npy'np.load(train_filenames[0]).shape(12, 8002)
np.load(label_filenames[0]).reshape(-1,1).shape(1, 1)

所以一個樣本有 12 個時間步長和 8002 個特征。

代碼:

def load_files_py(train_filenames, train_label_filenames):
   
   X_data = np.load(train_filenames)
   label = np.load(train_label_filenames).reshape(-1,1)
   
   return X_data, label, X_data.shape, label.shape
def parse_function(train_filenames, train_label_filenames):
    
    temp = tf.py_function(load_files_py, inp=[train_filenames, train_label_filenames], Tout=[tf.float32, tf.float32, tf.int32, tf.int32])
    X_data = tf.reshape(temp[0], [temp[2]])
    label = tf.reshape(temp[1], [temp[3]])
    return X_data, label
batch_size = 64

train_dataset = tf.data.Dataset.from_tensor_slices((train_filenames,train_label_filenames))
train_dataset = train_dataset.shuffle(len(train_filenames))
train_dataset = train_dataset.map(parse_function, num_parallel_calls=2)
train_dataset = train_dataset.batch(batch_size)
train_dataset = train_dataset.prefetch(1)

test_dataset = tf.data.Dataset.from_tensor_slices((test_filenames,test_label_filenames))
test_dataset = test_dataset.shuffle(len(test_filenames))
test_dataset = test_dataset.map(parse_function, num_parallel_calls=2)
test_dataset = test_dataset.batch(batch_size)
test_dataset = test_dataset.prefetch(1)
model = tf.keras.models.Sequential([
    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(16, input_shape = (12, 8002), return_sequences=True)),
    tf.keras.layers.LSTM(16),
    tf.keras.layers.Dense(16, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(8, activation='relu'),
    tf.keras.layers.Dense(4, activation='relu'),
    tf.keras.layers.Dense(1, activation = 'linear')   
]) 
model.compile(optimizer='adam', loss='mse')

EPOCHS =300

early = tf.keras.callbacks.EarlyStopping('val_loss', patience=20)
history = model.fit(train_dataset,
                    epochs=EPOCHS,
                    validation_data = test_dataset)

據我所知,加載 .npy 文件沒有問題,因為錯誤表明 model 存在問題。

在您的第一層中,您使用的是參數return_sequences=True這實際上是問題所在。 此參數返回一個3-D Array ,它與下一層不兼容。 我將通過刪除該參數來嘗試一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM