我是一名初學者,正在使用該keras_flow_from_dataframe課程訓練有關糖尿病視網膜病變的圖像數據集。但是我的模型一直欠擬合。因此,我嘗試使用 OpenCV 的自適應閾值實現,通過編寫要在我的圖像數據生成器類中傳遞的自定義預處理函數來進行預處理。當我在 Keras 之外使用它時,該函數運行良好,但是當我將它添加到我的圖像數據生成器類并適合我的模型時,它會bad argument type for built-in operation在我的第一個紀元開始之前返回一個類型錯誤。這是預處理代碼:def preprocess(im): im = cv2.imread(im, 1) im= cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) im=cv2.resize(im, (300,300)) im.resize(300, 300, 1) block_size = 73 constant = 2 # ADAPTIVE GAUSSIAN THRESHOLDING thr2 = cv2.adaptiveThreshold(im, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, block_size, constant) return thr2當我用數據幀中的圖像測試它時,它在 Keras 之外運行良好,但是當我將它添加到我的圖像數據生成器類時,它會引發錯誤。train_datagen = ImageDataGenerator( rotation_range=30, width_shift_range=0.4, height_shift_range=0.4, shear_range=0.3, zoom_range=0.3, horizontal_flip = True, fill_mode='nearest', preprocessing_function = preprocess)valid_datagen = ImageDataGenerator(preprocessing_function = preprocess)然后我從數據幀加載我的數據集:from keras.preprocessing.image import ImageDataGeneratortraingen = train_datagen.flow_from_dataframe(x_train, x_col='path', y_col='level',class_mode='other', target_size=(300,300), color_mode='grayscale', batch_size=16)validgen = valid_datagen.flow_from_dataframe(valid, x_col='path', y_col='level',class_mode='other', target_size=(300,300), color_mode='grayscale', batch_size=16)然后我使用 擬合模型model.fit_generator,然后拋出類型錯誤:bad argument type for built-in operation。
2 回答

慕田峪9158850
TA貢獻1794條經驗 獲得超8個贊
我遇到了像你這樣的問題,我的老師通過將它指向 tf preprocess_function 的文檔來幫助我,它說preprocess_function
參數是一個圖像,你可以閱讀更多關于這個的信息。
這就是為什么它會在cv2.imread(image)
. 您應該刪除該行,因為im
它是生成器為您提供的圖像。不需要加載它,因為它已經加載了
我的一個很好用,希望你的也很好。

POPMUISE
TA貢獻1765條經驗 獲得超5個贊
我認為問題在于 Keras 解析 openCV 輸出,因為當我使用另一個庫執行名為 ImgAUg 的處理時,它運行良好。這是鏈接。https://pypi.org/project/imgaug/。
所以我只是用庫編寫了一個預處理函數的腳本,然后我將它傳遞給了 keras imageDataGenerator 類。它運行良好,并沒有向我拋出任何錯誤。
添加回答
舉報
0/150
提交
取消