به بخش پرسش و پاسخ یادگیری عمیق خوش آمدید,
این نسخه آزمایشی سایت است.
لطفا به نکات زیر توجه کنید:
  • برای ارتباط با مدیران میتوانید از صفحه مدیران اقدام کنید.
  • سوال و جواب ها باید به زبان فارسی باشند. استفاده از زبان انگلیسی یا فینگلیش برای پاسخ دادن مجاز نیست.
  • لطفا بعد از پرسش سوال لینک سوال خود را در گرو تلگرام (Iran Deep Learning Group) معرفی کنید تا سریعتر به جواب برسید. برای دسترسی به آخرین لینک از منابع یادگیری استفاده کنید
  • لطفا بجای عکس از متن استفاده کنید. اگر متون طولانی هستند از سایت pastebin.com برای اپلود استفاده کرده و لینک حاصل را در سوال خود قرار دهید. برای قرار دادن تصویر ، از بخش ارسال تصویر ادیتور سایت استفاده کنید.
  • بعد از دریافت پاسخ، بهترین پاسخ را از طریق کلیک بر روی علامت تیک انتخاب کنید
  • اگر با خطا و یا مشکلی مواجه شدید از بخش تماس با ما در انتهای صفحه و یا ایمیل Coderx7@gmail.com موضوع را اطلاع دهید.

با تشکر

دسته بندی ها

0 امتیاز

سلام
یه چیز جالب دیدم !
evaluate_generator تو هر بار اجرا یه جواب جدید میده مثلا 70.21 یه بار دیگه اجراش میکنم 70.44 !!
مگه ساختار شبکه فرق میکنه هر بار یا تصادفی هست بعضی بخش ها !!!!!!!!!!!!
یا دستور من اشتباه بوده و کل دیتای تست رو نمیبینه هر بار !؟
(فقط خط آخر رو هر بار اجرا میکنم جواب متفاوتی میده)

test_datagen = ImageDataGenerator(rescale=1./255)

test_generator = test_datagen.flow_from_directory(
        'd:/test',
        target_size=(width, height),
        batch_size=batch_size,
        color_mode= "grayscale",
        class_mode='binary')

    model.evaluate_generator(test_generator,steps=test_generator.samples
توسط (208 امتیاز)

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

سلام.
این چیزی که نوشتید درست نیست.
پارامتر steps در تابع evaluate_generator رو برابر تعدا گام ها یعنی test_generator.samples//batch_size قرار دهید.
در ضمن دقت کنید که پارامتر steps مشخص میکنه چند استپ قراره اجرا بشه و روی دادگان تست ارزیابی بشه. پس دقت کنید که به نحوی باشه که کل دیتا رو یک بار ببینه.
برای اطمینان میتونید مقدار batch_size رو یک بذارید (در این حالت کل دیتا رو یک بار میبینه).
همچنین میتونید در تابع test_datagen.flow_from_directory مقدار shuffle=False کنید (این حالت باعث نمیشه که کل دیتای تست روش ارزیابی بشه ولی باعث میشه هر بار روی دیتای خاص و ثابت اجرا بشه)

توسط (540 امتیاز)
انتخاب شده توسط
علاوه بر مواردی که دو ستمون گفتن اگه بازم جوابا فرق میکرد
max_queue_size  رو هم یک بگذارید. (در evaluate_generator)
ممنون از جوابتون
1- برای دیتای ولیدیشن هم shuffle رو باید فالس کرد؟
فکر کردم مقدار دیفالتش فالسه
2-
model.evaluate_generator(test_generator,steps=int(test_generator.samples/test_generator.batch_size))
درسته؟

3- برای ولیدیشن shuffle =false گذاشتم صحت 2 درصد کمتر شد روی داده ی تست !!!
1- ترجیحا بله. برای تست و ولیدیشن shuffle رو False کنید. (البته اگه batch_size رو برای ولیدیشن و تست یک بذارید بهتره چون کل دیتا رو تست میکنه)
2- بله. درسته
3- ممکنه. همون طور که گفتم برای داشتن معیار مناسبتری از دقت ولیدیشن و تست بهتره مقدار batch_size رو یک بذارید برای این دو حالت (ولیدیشن و تست).
دیتای TRAIN,step اش رو که درست دادم ؟!
train_generator = train_datagen.flow_from_directory(
        'd:/train',  # this is the target directory
        target_size=(width, height),  # all images will be resized to 150x150
        batch_size=batch_size,
        color_mode= "grayscale",
        class_mode='binary',
        shuffle=True
      #  ,save_to_dir='preview', save_prefix='cat', save_format='png'
        )  # since we


model.fit_generator(
        train_generator,
        steps_per_epoch=int(train_generator.samples/train_generator.batch_size), #x_train.shape[0] // batch_size,
        epochs=20,
        validation_data=validation_generator,
        validation_steps=int(validation_generator.samples/validation_generator.batch_size),
        callbacks=callbackss
        )
...