TypeError:ลอย()เถียงกันต้องมีข้อความหรือจำนวนไม่ใช่'BatchDataset'เมื่อข้อมูล augmenting ใช้ fit_generator()

0

คำถาม

ฉันกำลังจะมีปัญหากับกำลังปรับใช้ข้อมูล Augmentation ตอนที่ฝึกคนคุณครูแต่พอกลับมา โดยเฉพาะเรื่องการใช้ของ fit_generator() วิธีการ.

ฉันมีในตอนแรงวิ่งของฉันนางแบบ succesfully โดยไม่มี augmentation ใช้ พ() วิธีการอย่างไรก็ตามตามที่ คนอื่น มันคือ recomended ต้องใช้ fit_generator(). มันดูเหมือนว่าทั้งสองวิธีการของต้องการคนเดียวกับข้อมูลเมื่อมันมาพร้อมที่จะรูปภาพและป้ายแต่ฉันกำลังจะต่อไปนี้ เกิดข้อผิดพลาด ตอนที่วิ่งรหัสด้านล่างนี้:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/tmp/ipykernel_35/139227558.py in <module>
    105 
    106 # train the network
--> 107 model.fit_generator(aug.flow(train_ds,  batch_size=batch_size),
    108         validation_data=val_ds, steps_per_epoch=len(train_ds[0]) // batch_size,
    109     epochs=epochs)

/opt/conda/lib/python3.7/site-packages/keras/preprocessing/image.py in flow(self, x, y, batch_size, shuffle, sample_weight, seed, save_to_dir, save_prefix, save_format, subset)
    894         save_prefix=save_prefix,
    895         save_format=save_format,
--> 896         subset=subset)
    897 
    898   def flow_from_directory(self,

/opt/conda/lib/python3.7/site-packages/keras/preprocessing/image.py in __init__(self, x, y, image_data_generator, batch_size, shuffle, sample_weight, seed, data_format, save_to_dir, save_prefix, save_format, subset, dtype)
    472         save_format=save_format,
    473         subset=subset,
--> 474         **kwargs)
    475 
    476 

/opt/conda/lib/python3.7/site-packages/keras_preprocessing/image/numpy_array_iterator.py in __init__(self, x, y, image_data_generator, batch_size, shuffle, sample_weight, seed, data_format, save_to_dir, save_prefix, save_format, subset, dtype)
    119                     y = y[split_idx:]
    120 
--> 121         self.x = np.asarray(x, dtype=self.dtype)
    122         self.x_misc = x_misc
    123         if self.x.ndim != 4:

/opt/conda/lib/python3.7/site-packages/numpy/core/_asarray.py in asarray(a, dtype, order)
     81 
     82     """
---> 83     return array(a, dtype, copy=False, order=order)
     84 
     85 

TypeError: float() argument must be a string or a number, not 'BatchDataset'

ฉันต้องเสร็จสมบูรณ์ของกูเกิ้ลงในลังพยายามซ่อม TypeError:ลอย()เถียงกันต้องมีข้อความหรือจำนวนไม่ใช่'BatchDataset' ข้อผิดพลาดแต่ต้องไม่ avail. ใครมีคำแนะนำเป็นเพื่อก้าวไปข้างหน้า?

import pathlib
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
import matplotlib.pyplot as plt

# Set data directory
data_dir = pathlib.Path("../input/validatedweaponsv6/images/")

# Set image size
img_height = 120
img_width = 120

# Hyperparameters
batch_size = 128
epochs = 50
learning_rate = 0.001

# Create the training dataset
train_ds = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    label_mode='categorical',
    validation_split=0.2,
    subset="training",
    shuffle=True,
    seed=123,
    image_size=(img_height, img_width),
    batch_size=batch_size)

# Create the validation dataset
val_ds = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    label_mode='categorical',
    validation_split=0.2,
    subset="validation",
    shuffle=True,
    seed=123,
    image_size=(img_height, img_width),
    batch_size=batch_size)

# Create sequential model
model = Sequential([

    # Preprocessing
    layers.Rescaling(1./127.5, offset=-1,
                     input_shape=(img_height, img_width, 3)),

    # Encoder
    layers.Conv2D(8, 3, activation='relu'),
    layers.MaxPooling2D(),
    layers.Conv2D(16, 3, activation='relu'),
    layers.MaxPooling2D(),
    layers.Conv2D(32, 3, activation='relu'),
    # layers.Conv2D(2, 3, activation='relu'), ???
    layers.Flatten(),

    # Decoder
    layers.Dense(64, activation='relu'),
    layers.Dropout(0.5),
    layers.Dense(2, activation='softmax')
])

# Print the model to see the different output shapes
print(model.summary())

# Compile model
model.compile(loss='categorical_crossentropy',
              optimizer=keras.optimizers.SGD(learning_rate=learning_rate), metrics=['accuracy'])

# construct the training image generator for data augmentation
aug = tf.keras.preprocessing.image.ImageDataGenerator(rotation_range=20, zoom_range=0.15,
    width_shift_range=0.2, height_shift_range=0.2, shear_range=0.15,
    horizontal_flip=True, fill_mode="nearest")

# train the network
model.fit_generator(aug.flow(train_ds,  batch_size=batch_size),
validation_data=val_ds, steps_per_epoch=len(train_ds[0]) // batch_size,
epochs=epochs)

# Print scores
score = model.evaluate(train_ds, verbose=0)
print('Validation loss:', score[0])
print('Validation accuracy:', score[1])

# Show loss and accuracy models
show_history(history)

ขอบคุณสำหรับกำลังดูของฉันโพสต์! :)

deep-learning keras tensorflow
2021-11-19 13:25:05
1

คำตอบที่ดีที่สุด

0

ก่อนข่าวคุณยังปรากฎต้องเป็น 3 ปีแล้วค่อนข้างล้าสมัย เริ่มจาก tensorflow 2.1.0 ง .พอดีกับ วิธีการยอมรับดมาเครื่องเหมือนกันและ ตอนนี้มันรัดแทนกันได้fit_generator. ผมขอแนะนำให้คุณต้องปรับปรุงของคุณ tensorflow ถ้าเป็นไปได้

เรื่องที่สองเกิดข้อผิดพลาดเหมือนจะไม่อยู่ใน fit_generator วิธีการแต่งในแบบที่คุณกำหนด datasets. พวกเขาเพิ่งแรกที่เรียกว่าอยู่ใน fit_generator และนั่นเป็นเหตุผลว่าทำไมข้อความผิดพลาดร่องรอยคุณกลับไปที่นั่น

เป็นของเกิดข้อผิดพลาดงตัวมันเอง,ฉันไม่เข้าใจว่าคนส่วนหนึ่งของการซ้อนในเครื่องปั่น,และฉันคิดว่ามันสามารถมีปัญหาอยู่ที่นี่ คุณกำลังพยายามที่จะผ่าน batched วันที่ได้จาก tf.keras.utils.image_dataset_from_directory ให้อีกเครื่องกำเนิดซึ่งดูเหมือนจะเป็นไปไม่ได้หรอก

ถ้าฉันเข้าใจอย่างถูกต้อง,คุณมีแค่หนึ่งป้ายชื่อในแต่ละภาพและภาพของแต่ละชั้นเรียนจะถูกจัดเก็บไว้ในแยกโฟลเดอร์ดังนั้นฉันแนะนำให้คุณใช้ flow_from_directory วิธีการของ tf.keras.preprocessing.ภาพได้ที่นี่ImageDataGenerator โดยตรง นี่กำเนิดไฟฟ้าเรียบร้อจะทั้งสองอ่านและ augment ภาพดังนั้นคุณสามารถทิ้ง tf.keras.utils.image_dataset_from_directory นส่วนหนึ่ง.

ต้องใช้เครื่องมือสร้าง,คุณต้องมีภาพต่างๆในรูปแบบ:

  • root_directory
    • class1 โฟลเดอร์
    • class2 โฟลเดอร์
    • etc

และรหัสของคุณจะเป็นอะไรแบบนี้:

gen = tf.keras.preprocessing.image.ImageDataGenerator( #desired augmentation, ...) 
train_generator = gen.flow_from_directory(directory = root_directory,
target_size=(256, 256), classes= *list of class names*,
class_mode='categorical', batch_size=32, shuffle=True, ...)
model.fit(train_generator, ...)

คุณสามารถมองผ่าน"validation_split"เถียงกันด้วยเพื่อให้แยกออก datasets สำหรับการฝึกและการตรวจสอบ. อ่านอะไรเพิ่มเติม\เกี่ยวกับ ImageDataGenerator และ flow_from_directory วิธีการ อยู่ในห้อย่างเป็นทางการเอกสาร.

2021-11-19 18:51:15

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่