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

با تشکر

دسته بندی ها

0 امتیاز

با سلام و ممنون از زحماتی که می کشید..
ببخشید من قبلا در یک پست دیگه سوالمو پرسیدم و اون اینکه:
میخواستم از معماری mnist برای ارقام دستنویس فارسی استفاده کنم و شما به من این کد رو گفتید:

import numpy as np
import matplotlib.pyplot as plt
try:
    from scipy import misc
except ImportError:
    !pip install scipy
    from scipy import misc

training_size = 10
img_size = 28*28
training_data = np.empty(shape=(training_size, img_size))  

import glob
i = 0
for filename in glob.glob('/home/hossein/Pictures/*.jpg'): 
    image = misc.imread(filename)
    training_data[i] = image.reshape(-1)
    i+=1


print(training_data[0].shape)

تعداد تصاویر آموزش من ۶۰۰۰۰ تا است و من جای training_size این مقدار رو گذاشتم. درسته؟
از طرفی این رو هم گفتید که:

بعد شما لیبل ها رو میخونید اما باید بجای یه وکتور با سایز ۱۰ (که شماره
هر کلاس در یک خونه ذخیره شده )‌یه آرایه دو بعدی به سایز
[trainingsetsize, numberofclasses] و بعد ببینید شماره کدوم کلاسه و
اندیس متناظر با اون ۱ و بقیه رو صفر کنید . میتونید این کار رو بصورت
یکدفعه و یکجا انجام بدید به اینصورت که اول همه لیبلها رو در یک وکتور
بخونید بعد با استفاده از دستور زیر ماتریس مورد نظرتون رو بدست بیارید :

import numpy as np
np.eye(n_labels)[target_vector]

که من توضیح بالا رو متوجه نمیشم.. من چطوری باید لیبل ها رو جداگانه بخونم.. در مرحله قبل تصاویر رو خوندم و training_data من به سایز ۷۸۴ در ۶۰۰۰۰ هست.. یعنی برای هر ۶۰۰۰۰ تا باید لیبل هاشونو بخونم؟ یعنی این قسمت جای کدوم قسمت کد اصلی قرار میگیره؟
کد اصلی یه خط داره که mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
در واقع این mnist همون training_data در کد من میشه؟
لطفا بیشتر توضیح بدید.. ممنون میشم. واقعا گیر افتادم. باتشکر!

توسط (155 امتیاز)
ویرایش شده توسط

1 پاسخ

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

سلام
بله باید بجای 10 تعداد 60 هزار رو قرار بدید که همون اندازه training set شما هست .
در مورد خوندن لیبل ها هم معمولا لیبل ها را بصورت فایل متنی همراه دیتاست ارائه میکنن. البته بعضی ها هم ممکنه عکس و لیبل رو با هم در یک فایل باینری ذخیره کرده باشن که در هر صورت اطلاعات لیبل ها و اینکه چطوری باید خونده بشن تو همون جایی که دیتاست رو برای دانلود قرار میدن میگن .
بگذریم . در مورد خوندن لیبل ها هم بله شما باید یک آرایه 60 هزار در ده درست کنید که لیبل مربوط به هر عکس مشخص باشه
در حالت عادی گفته بودیم که لیبل ها رو بصورت زیر مشخص میکنن معمولا

pic1.jpg 1
pic2.jpg 3
pic3.jpg 0
pic4.kpg 8
....

ولی ما برای دسته بندی میاییم اصطلاحا هر لیبل رو به یک one hot encoded vector تبدیل میکنیم . یعنی یک بردار از 0 و 1 که به تعداد کلاس ما عضو داره .و هرجایی که شماره لیبل ما هست 1 و بقیه خونه ها صفر میشه . با یک مثال میشه بهتر فهمید
مثلا برای اولین تصویر و لیبل اون ما بردار زیر رو داریم . یک بردار که 10 تا خونه داره (0 تا 9 )
خط اول کلاسهای ماس و خطهای بعدی بردارهای تبدیل شده ماس که نگاه بکنید میبینید هرجایی که اندیس بردار برابر با کلاس ما هست 1 و بقیه جاها صفر استفاده کردیم . به این میگن one hot verctor :

0 1 2 3 4 5 6 7 8 9
0 1 0 0 0 0 0 0 0 0 
0 0 0 1 0 0 0 0 0 0 
1 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 1 0 
...

و به همین صورت الی اخر
اون یک خطی که در تنسورفلو هست خودش خودکار اون تبدیل به one hot vector رو انجام میده (اگه شما one_hot=False قرار بدید میبینید که لیباهای شما همه بصورت معمولی هستن و فقط با true کردن اون ارگومانه که شما بردار به ازای هر لیبل بدست میارید .
بعد از این مرحله براحتی میتونید از کدهای تنسورفلو برای مثال mnist استفاده کنید و هیچ فرقی نمیکنه . تنها کار اضافه شما وقتی دیتاستتون عوض میشه در اصل بازنویسی همون متد input_data.read_data_sets() هست . یعنی داده ها رو بخونید تو یه آرایه و لیبل هاتون هم بصورت One hot vector تو یه ارایه دیگه بعدش دیگه هیچ فرقی با مثالهایی که در تنسورفلو میبینید نداره .

توسط (4.3k امتیاز)
انتخاب شده توسط
سلام.. ممنون از توضیحات خوبتون..
ببخشید لیبلهای من با پسوند cdb هستند که تو پایتون نمیتونم بخونمشون.. باید ماژولی باشه که import کنم توش تا بتونم بخونمش.. درسته؟ چطوری لیبل ها رو بخونم؟ ؟آیا باز هم از اون دستور imread میشه استفاده کرد؟ ممنون ازپاسخی که میدهید..
سلام. imread مخصوص خوندن تصاویر هست. شما باید cdblib رو برای پایتون نصب کنید و با استفاده از اون فایلهاتون رو بخونید.
...