TypeError: फ्लोट() तर्क होना चाहिए एक स्ट्रिंग या एक संख्या है, नहीं 'BatchDataset' जब डेटा प्रवाह का उपयोग कर fit_generator()

0

सवाल

मैं कर रहा हूँ परेशानियों को लागू करने के साथ डेटा वृद्धि जब प्रशिक्षण मॉडल. विशेष रूप से के उपयोग के बारे में fit_generator() विधि है ।

मैं मूल रूप से चलाने के लिए अपने मॉडल को सफलतापूर्वक बिना वृद्धि का उपयोग कर फिट() विधि है, हालांकि के अनुसार दूसरों की अनुशंसा की गई है का उपयोग करने के लिए 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' त्रुटि है, लेकिन कोई फायदा नहीं हुआ । किसी को भी सुझाव दिया है, के रूप में आगे बढ़ने के लिए?

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 साल पुरानी है और एक पुराना सा. शुरू से ... बदलेगी देश 2.1.0, के .फिट विधि स्वीकार जनरेटर भी है, और वर्तमान में यह पूरी तरह से बदल दिया । fit_generator. मैं सुझाव है कि आप अद्यतन करने के लिए अपने ... बदलेगी देश यदि संभव हो तो.

दूसरा, त्रुटि नहीं हो रहा है में fit_generator विधि है, लेकिन में जिस तरह से आप को परिभाषित डेटासेट. वे सिर्फ पहली बार में कहा जाता है fit_generator, और यही कारण है कि त्रुटि संदेश ट्रेस आप वापस वहाँ है.

के रूप में त्रुटि की ही है, मैं समझ में नहीं आता के भाग घोंसले के शिकार के जनरेटर के हैं, और मुझे लगता है कि यह समस्या पैदा कर सकते हैं यहाँ. आप की कोशिश कर रहे हैं पारित करने के लिए batched डेटासेट से मिल tf.keras.utils.image_dataset_from_directory करने के लिए एक और जनरेटर लगता है, जो करने के लिए असंभव हो सकता है.

अगर मैं सही ढंग से समझ, आप केवल एक लेबल प्रत्येक छवि पर, और चित्र के प्रत्येक वर्ग में संग्रहित कर रहे हैं, अलग-अलग फ़ोल्डर्स, तो मैं सुझाव है कि आप का उपयोग करने के लिए flow_from_directory की विधि tf.keras.preprocessing.छवि । ImageDataGenerator सीधे. इस जनरेटर दोनों को पढ़ने के लिए और बढ़ाने छवियों है, तो आप ड्रॉप कर सकते हैं tf.keras.utils.image_dataset_from_directory हिस्सा है ।

का उपयोग करने के लिए इस जनरेटर के साथ, आप की जरूरत है करने के लिए छवियों के रूप में:

  • root_directory
    • class1 फ़ोल्डर
    • class2 फ़ोल्डर
    • आदि

और अपने कोड कुछ इस तरह किया जाएगा:

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" तर्क भी प्राप्त करने के लिए अलग-अलग डेटासेट के लिए प्रशिक्षण और सत्यापन. और अधिक पढ़ें के बारे में ImageDataGenerator और flow_from_directory विधि में सरकारी दस्तावेज.

2021-11-19 18:51:15

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में