簡體   English   中英

ValueError:形狀必須為 0 級,但對於“ReadFile”(操作:“ReadFile”)為 1 級,輸入形狀為:[1]

[英]ValueError: Shape must be rank 0 but is rank 1 for 'ReadFile' (op: 'ReadFile') with input shapes: [1]

這是我的總體問題:我正在嘗試構建一個包含圖像的 tf.data.Dataset。 我正在從 csv 文件中讀取 imageIds(文件名),以便能夠將它們與同樣在同一個 csv 文件中找到的相應 label 結合起來。 CSV 文件截圖

df_imageIDs = pd.read_csv(file_labels,
                          usecols=["ImageId"])
df_imageIDs = df_imageIDs.apply(lambda ID: data_dir_train + ID, axis=1)
ds_filenames_images = tf.data.Dataset.from_tensor_slices(df_imageIDs.to_numpy())

在使用 pandas 讀取圖像 ID 並添加目錄路徑后,我使用方法tf.read_file將 map 圖像解碼 function 到我的數據集。 這會引發錯誤。

def decode_image(file_path):
    img = tf.io.read_file(file_path)
    img = tf.image.decode_jpeg(img, channels=parameters["CHANNELS"])
    img = tf.image.convert_image_dtype(img, tf.float32)
    img = tf.image.resize(img, (parameters["IMAGE_HEIGHT"], parameters["IMAGE_WIDTH"]))
    return img

ds_images = ds_filenames_images.map(decode_image,
                                    num_parallel_calls=AUTOTUNE)

現在,我之前嘗試過的是使用tf.data.Dataset.list_files工作正常但 ImageIds 的順序錯誤。

ds_filenames_imagesx = tf.data.Dataset.list_files(data_dir_train + "*.jpg",
                                                  shuffle=False)

不同之處似乎在於 pandas 如何使用文件名,盡管它們具有相同的數據類型“字符串”。 打印出后一種方法的元素會導致:

tf.Tensor(/home/wid35008/airbus-ship-detection/train_v2/000155de5.jpg, shape=(), dtype=string)

打印出我想使用的方法的張量導致:

tf.Tensor(['/home/wid35008/airbus-ship-detection/train_v2/0002756f7.jpg'], shape=(1,), dtype=string)

因為我不知道如何解釋差異,也不知道如何找到解決方法。 有人有解決這個問題的方法嗎? 提前致謝!

因此,為我自己和可能偶然發現它的其他人提供解決方案。 我在創建后重新塑造了數據集,因此里面的張量將再次具有標量的形狀。

ds_filenames_images = tf.data.Dataset.from_tensor_slices(df_imageIDs.to_numpy())
ds_filenames_images = ds_filenames_images.map(lambda t: tf.reshape(t, []))

文檔對此給出了更深入的解釋。 張量形狀

暫無
暫無

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

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