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

با تشکر

دسته بندی ها

0 امتیاز

سلام.من یک شبکه اتوانکدر کانولوشنال با تنسورفلو و کراس نوشتم و تعداد زیادی داده برای اموزش به این شبکه میدم اما متاسفانه خطای حافظه میده.رم سیستم 4 هست و میخوام در هر مرحله بخشی از داده های اموزش رو بدم.که در واقع یجور بافرینگ اتفاق بیفته.کسی میتونه راهنماییم کنه چطور باید اینکار رو بکنم؟؟

توسط (107 امتیاز)
برای کدنویسیش هم میتونین کمکی بکنین؟؟من میدونم باید داده هارو بچ بچ بدم به شبکه ولی چطوری؟
کدهای مختلف هست. کدی که تا الان نوشتید رو داخل سوال قرار بدید تا روی همون بشه اضافه کرد.
از data generator استفاده کردم ولی داده های من عکسن و نمیدونم چطوری توی بخش dataset باید واردشون کنم!(اون چیزایی ک نوشتم حالتیه که توی خود سایت کراس توضیح داده ولی من متوجه نشدم).ممنون میشم راهنمایی بفرمایین

import numpy as np

from keras.models import Sequential
from myClasses import DataGenerator

# Parameters
params = {'dim': (32,32,32),
          'batch_size': 64,
          'n_classes': 6,
          'n_channels': 1,
          'shuffle': True}

# Datasets
partition = {'train': ['id-1', 'id-2', 'id-3'], 'validation': ['id-4']}
labels = {'id-1': 0, 'id-2': 1, 'id-3': 2, 'id-4': 1}

# Generators
training_generator = DataGenerator(partition['train'], labels, **params)
validation_generator = DataGenerator(partition['validation'], labels, **params)

# Design model
#create layers and model
from keras.layers import Input, Dense, Conv2D, MaxPooling2D, UpSampling2D
from keras.models import Model
import numpy as np
from keras import backend as K

input_img = Input(shape=[228, 228, 1])  # adapt this if using `channels_first` image data format

x = Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
encoded = MaxPooling2D((2, 2), padding='same')(x)

# at this point the representation is (4, 4, 8) i.e. 128-dimensional

x = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = Conv2D(16, (3, 3), activation='relu')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)

autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')

#=====================================



# Train model on dataset
autoencoder.fit_generator(generator=training_generator, validation_data=validation_generator,use_multiprocessing=True ,workers=6)


اروری که موقع ران این کد میگیرم بصورت زیر هست که فک کنم بخاطر ورودی دادن اشتباهه:
Using TensorFlow backend.
Epoch 1/1
Traceback (most recent call last):
  File "C:/Users/afghahi/PycharmProjects/ImageProcessing/kerasScript.py", line 55, in <module>
    autoencoder.fit_generator(generator=training_generator, validation_data=validation_generator,use_multiprocessing=True ,workers=6)
  File "E:\Program Files\Python\Python36\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "E:\Program Files\Python\Python36\lib\site-packages\keras\engine\training.py", line 1418, in fit_generator
    initial_epoch=initial_epoch)
  File "E:\Program Files\Python\Python36\lib\site-packages\keras\engine\training_generator.py", line 251, in fit_generator
    callbacks.on_epoch_end(epoch, epoch_logs)
  File "E:\Program Files\Python\Python36\lib\site-packages\keras\callbacks.py", line 79, in on_epoch_end
    callback.on_epoch_end(epoch, logs)
  File "E:\Program Files\Python\Python36\lib\site-packages\keras\callbacks.py", line 338, in on_epoch_end
    self.progbar.update(self.seen, self.log_values)
AttributeError: 'ProgbarLogger' object has no attribute 'log_values'

Process finished with exit code 1

1 پاسخ

0 امتیاز

سلام
اگه حجم دیتا زیاده و موقع load کردن توی رم سیستم جا نمیشه باید از generator استفاده کنین
توضیح بیشتر

اگه موقع train مشکل کمبود حافظه دارین به خاطره کم بودن VRAM که داخله GPU هست باید بچ سایز رو کاهش بدین که تو دستور fit با پارامتر batch_size مشخص میشه

توسط (470 امتیاز)
سلام.ممنون.بله من از data generator استفاده کردم دقیقا مطابق لینکی که قرار دادین پیش رفتم منتها اون قسمتی که داره ورودی میگیره رو متوجه نمیشم.ورودی های من ویدیو هستند که تبدیل به عکسشون کردم ولی اینجا دیکشنری تعریف کرده که من متوجهش نمیشم چطوری عکس هارو باید بدم بهش:

 Notations
Before getting started, let's go through a few organizational tips that are particularly useful when dealing with large datasets.

Let ID be the Python string that identifies a given sample of the dataset. A good way to keep track of samples and their labels is to adopt the following framework:

Create a dictionary called partition where you gather:

in partition['train'] a list of training IDs
in partition['validation'] a list of validation IDs
Create a dictionary called labels where for each ID of the dataset, the associated label is given by labels[ID]

For example, let's say that our training set contains id-1, id-2 and id-3 with respective labels 0, 1 and 2, with a validation set containing id-4 with label 1. In that case, the Python variables partition and labels look like

>>> partition
{'train': ['id-1', 'id-2', 'id-3'], 'validation': ['id-4']}
and

>>> labels
{'id-1': 0, 'id-2': 1, 'id-3': 2, 'id-4': 1}

اگر راهنمایی کنین ممنون میشم.
من صرفا اون رو فرستادم که با مفهوم generator آشنا بشین وگرنه خود کراس این کلاس رو داره:
https://keras.io/preprocessing/image/
قسمت Example of using .flow_from_directory(directory) رو نگاه کنین
تو این حالت فقط کافیه عکسهای train و valid در پوشه جدا قرار داشته باشن
در این مورد سرچ کنید مطلب زیاد هست
ببخشید من الان میخوام تعدادی فریم رو به شبکه با هم بدم ایا با generator امکان همچین کاری هم هست؟؟
الان به اینصورت ورودی دادم به generator:
train_generator = train_datagen.flow_from_directory(
        'data/train',
        target_size=(228, 228),
        batch_size=32,
        color_mode="grayscale",
        shuffle=False,
        class_mode="input")

اما شبکه من یک اتوانکدر کانولوشنال سه بعدی هست که 5 تا ورودی میگیره.اون پنجمین ورودی رو چطوری میتونم به generator بدم؟
باید یک generator خودتون تعریف کنید
custom generator keras رو سرچ کنید. خودم این کارو دقیقا نکردم که بدونم
حتما سرچ میکنم.خیلی ممنونم اقای تقی زاده که جواب دادین.ان شاا... هر چی میخواین خدا بهتون بده
خواهش می کنم
...