iT邦幫忙

0

Keras的ImageDataGenerator問題(已解決)

jojo 2021-08-09 19:39:191573 瀏覽

程式碼(這是關於分類狗與貓)

from tensorflow.keras.preprocessing.image import ImageDataGenerator as Ig

train_datagen = Ig(rescale = 1./255)
test_datagen = Ig(rescale = 1./255)


train_generator = train_datagen.flow_from_directory(train_dir, target_size = (150, 150), batch_size = 20, class_mode = "binary")
validation_generator = test_datagen.flow_from_directory(validation_dir, target_size = (150, 150), batch_size = 20, class_mode = "binary")

Output:

Found 3000 images belonging to 2 classes.
Found 2000 images belonging to 2 classes.

問題

for data_batch, labels_batch in train_generator:
    print('data batch shape:', data_batch.shape)
    print("labels batch shape:", labels_batch.shape)
    break

當我想查看產生器裡的維度是多少卻發生這個問題

TypeError: __array__() takes 1 positional argument but 2 were given

keras_preprocessing utils.py這裡出現問題。
據我所知是__array__()的參數只有一個,我卻給予了兩個,但我不知道我哪裡出了問題,具體需要修改的地方是哪裡...
懇請各位大大求救/images/emoticon/emoticon20.gif
如果還需要其他程式碼,我會另外補充。

------------解決心得------------

一開始想說是tensorflow版本問題,我從2.5.0降到2.4.0,結論失敗。
接下來仔細閱讀錯誤訊息是來自numpy的__array__,我更新到最新,結論失敗。
最後經過漫長的查證,瞭解keras的imageprocess會用到Python Imaging Library(簡稱PIL或稱Pillow),而PIL 8.3.0的版本在這部份上有bug(stak overflow的網友說的),如果遇到問題可以降版本到8.2.0

stackoverflow文章來源

來源1
來源2

補充

看完GitHub發現最新版8.3.1也可以解決喔!原文

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答