• آفیس رایگان برای دانشجویان

    20 Jan 2016

    به نام خدا

    چون دانشجویان در سراسر دنیا قشر فقیری هست(!)، بخاطر همین خیلی از شرکت‌های نرم‌افزاری سعی می‌کنن بعضی از سرویس‌ها و نرم‌افزارهاشون رو با قیمت پایین یا به صورت رایگان به دانشجویان ارائه بکنن. نمونه‌اش مثلاً گیت‌هابه که پنج تا repository خصوصی به هر دانشجو میده، یا مثلاً شرکت Autodesk نرم‌افزار AutoCAD یا یه تعداد دیگه‌ای از نرم‌افزارهاش رو به صورت رایگان میده، شرکت Jetbrains اجازه‌ی استفاده از IDEهاش و البته Resharper رو به صورت رایگان میده و کلی چیز دیگه که اگر بگردید حتماً پیدا می‌کنید.

    یکی دیگه از شرکت‌هایی که از قدیم کلی خدمات رایگان به دانشجوها میده شرکت Microsoft هست. این شرکت تحت برنامه‌ی Dreamspark یه سری از خدمات رو از سال‌ها قبل ارائه میداد، خدماتی مثل Windows Server، SQL Server، Microsoft R Server و البته خدماتی با همکاری شرکت‌های دیگه مثل Github و Xamarin و یه مدت استفاده از آموزش‌های سایت Pluralsight. قدیم‌ها هم که ویژوال استودیو کلاً نسخه‌ی رایگان نداشت، نسخه‌ی Professional ویژوال استودیو رو هم میشد از طریق این برنامه گرفت. ولی الان که نسخه‌ی رایگان Community به نسخه‌های ویژوال استودیو اضافه شده نیاز به این خدمت کم شده. راستی اخیراً هم اکانت رایگان Azure به کاتالوگ خدمات Dreamspark اضافه شده که البته فعلاً نمیشه از ایران فعالش کرد. باید صبر کرد ببینیم این مشکل رو حل می‌کنن یا نه.

    قبلاً از طریق برنامه‌ی Dreamspark میشد تخفیف برای خرید subscription آفیس 365 گرفت، ولی این رو برداشتن.

    به جاش الان آفیس 365 به صورت رایگان به دانشجوها داده میشه!! :)

    شاید یک سال قبل (یا کمتر یا بیشتر، دقیق یادم نیست) بود که اعلام شد مایکروسافت به دانشجوها subscription آفیس 365 رو به صورت رایگان ارائه خواهد داد. برای اینکار هم نیاز به این دارید که آدرس ایمیل از طرف دانشگاه با دامنه‌ی .edu داشته باشید.

    مشکل این بود که این امکان برای ایران نبود، یعنی با ایمیل دانشگاه‌های ایرانی نمیشد این کار رو کرد. ولی امروز به صورت اتفاقی دوباره سعی کردم این کار رو بکنم و موفق شدم. یعنی احتمالاً مدتی هست که این امکان فراهم شده و بالاخره از اینجا با ایمیل دانشگاه‌های ایرانی هم میشه آفیس 365 رو گرفت. برای اینکار کافیه به این آدرس برید و با وارد کردن ایمیل دانشگاهی‌تون حساب آفیس 365 رو دریافت کنید. با این کار یک ترابایت فضای رایگان روی OneDrive می‌گیرید. بعد می‌تونید نرم‌افزار آفیس رو بدون نیاز به کرک کردن استفاده کنید (البته من رو نسخه‌ی Office Standard امتحان کردم، چون این برنامه شامل نرم‌افزارهای Word، PowerPoint، OneNote و Excel میشه) نسخه‌های دیگه شامل نرم‌افزارهای دیگه‌ای هستن که توی این توافقنامه نیستن. در ضمن با این کار میشه آفیس رو روی 5 تا از کامپیوترهاتون استفاده کنید (PC و Mac) (توجه کنید روی کامپیوترهاتون، نه روی کامپیوتر خودتون و کسای دیگه، این Licence فقط به یک شخص حقیقی داده میشه). بعد روی موبایل و تبلت‌تون هم می‌تونید ازش استفاده کنید (روی همه‌ی سیستم‌عامل‌ها).

    سلب مسئولیت (فارسی همون Disclaimer): من این کارها رو با ایمیل دانشگاهی که توش مشغول تحصیل هستم (دانشگاه شریف) امتحان کردم، در مورد دانشگا‌ه‌های دیگه‌ی ایران اطلاعی ندارم.


  • آدرس جدید!

    05 Sep 2015

    به نام خدا

    راستی آدرس اینجا هم تغییر کرده. یعنی علاوه بر اینکه میشه با آدرس قبلی http://erfannoury.github.io به اینجا دسترسی پیدا کرد، حالا آدرس http://blog.erfan.xyz هم اضافه شده. با این آدرس هم میشه به بلاگ دسترسی پیدا کرد.


  • نصب کتابخانه‌ی Theano در ویندوز (به‌روزرسانی)

    به نام خدا

    بعد از پست قبلی در مورد نصب Theano بر روی ویندوز، تغییرات زیادی در این زمینه و کتابخانه‌های یادگیری عمیق و وضعیت نصب اونها روی ویندوز ایجاد شده. این پست به نوعی به‌روزرسانی بر روی موضوع نصب این کتابخانه‌ی پایه‌ای و بعد معرفی یک کتابخانه‌ی جدیده.

    نکات جدید برای نصب Theano

    چند روز پیش می‌خواستم این کتابخانه رو روی یک کامپیوتر جدید نصب کنم. اولین کاری که کردم دانلود کردن و نصب Anaconda Python، CUDA 7.0 و البته Visual Studio 2013 بود. بخاطر اینکه هنوز CUDA از Visual Studio 2015 پشتیبانی نمی‌کنه، سراغ نسخه‌ی جدیدش نرفتم. بعد از اینکه اینا رو نصب کردم (اول ویژوال استودیو، بعد پایتون، در نهایت کودا) رفتم سراغ نصب gcc. درسته که برای کامپایل‌کردن قسمت اصلی کد Theano از کامپایلر مایکروسافت استفاده میشه، ولی بعضی از تیکه‌های کد نیاز به gcc دارن. برای اینکار TDM GCC رو دانلود و نصب کردم. این نسخه از بقیه زودتر آپدیت میشه و چیز اضافی‌ای هم نصب نمی‌کنه. بعد از اینکه همه‌ی اینها رو نصب کردم و مطمئن شدم که همه‌ی چیزهای لازم در مسیر سیستم قرار گرفتن رفتم سراغ نصب Theano.

    اولین مشکلی که خوردم این بود که وقتی از gcc می‌خواست استفاده کنه خطای عدم وجود فایل‌های لازم برای پایتون رو میداد. رفتم خوب مسیر پایتون (پوشه‌ی libs) رو بررسی کردم. دیدم که همه چیز درسته. بعد از کمی جستجو، فهمیدم که gcc نیاز به فایل‌های کتابخانه‌ای با فرمت libpython27.a داره، نه python27.lib. بنابراین باید اول این فایل رو پیدا (یا درست) می‌کردم و بعد در همون پوشه قرار میدادم. بعد از اینکار یکی از مشکلات کامپایل حل شد. برای حل مشکل به این لینک یه نگاهی بندازید.

    مشکل دیگه یه مشکل خیلی عجیب بود. اینکه C:\Windows\System32 تو مسیرهای سیستمی نبود. خیلی عجیب بود این موضوع برام و باعث ایجاد کلی مشکل و گرفتن کلی وقت شد. ولی بعد از اضافه کردن مسیر، کتابخانه به صورت کامل کامپایل شد.

    بعد از این، نوبت درست کردن فایل تنظیمات کتابخانه، یعنی .theanorc بود. این رو هم در مسیر کاربری قرار دادم و بعدش رفتم سراغ اجرای کتابخانه که بدون مشکل اجرا شد. اینجا به عنوان مرجع، محتوای فایل تنظیمات Theano رو میذارم.

    [blas]
    ldflags = 
    [nvcc]
    flags=-LC:\Anaconda\libs
    compiler_bindir=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
    optimizer_including=dnn
    fastmath = True
    [global]
    device = gpu
    floatX = float32
    [cuda]
    root=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0
    

    البته اگر خوب ببینید قسمت blas خالیه. برای اون قسمت هم کتابخانه‌ی OpenBLAS رو دانلود کردم و مسیر اون کتابخانه و همچنین اسم فایل کتابخانه‌ی OpenBLAS رو به عنوان ورودی دادم.

    بعد از این مراحل فکر نمی‌کنم مشکلی در نصب Theano پیش بیاد.

    اون dnn هم که نوشتم همون cuDNN هست که انویدیا عرضه کرده تا محاسبات مرتبط با یادگیری عمیق سریعتر بشه. نصب اون هم راحته. بعد از اینکه فایل‌هاش رو دانلود کردید، تو پوشه‌های مرتبط توی محل نصب CUDA قرارشون بدید و اینجا هم اون خط رو به فایل تنظیمات اضافه کنید. cuDNN 2 روی ویندوز بدون مشکل کار می‌کنه، ولی cuDNN 3 رو هنوز امتحان نکردم.

    کتابخانه‌ی Keras

    کتابخانه‌ی یادگیری عمیق Keras یکی از اون کتابخانه‌های یادگیری عمیقه که به نظر میاد آینده‌ی بسیار درخشانی داشته باشه. این کتابخانه روی Theano ساخته شده، ولی API اون از Torch7 الهام گرفته شده و خیلی خوش‌دسته. برخلاف پیچیدگی‌های بالای کار با Theano، کد مربوط به این کتابخانه خیلی خوانا است و به راحتی می‌تونید توش به طراحی مدل و آموزش و تحلیل مدل بپردازید. واقعاً بین همه‌ی کتابخانه‌های یادگیری عمیقی که بررسی کردم (برای پایتون البته)، این بهترین گزینه برای شروع کاره. آموزش‌ها و راهنمایی‌های بسیار خوبی هم تو این آدرس گذاشتن. حتماً اگر تصمیم دارید کار روی یادگیری عمیق رو بدون مشکلات زیاد شروع کنید نگاهی به این کتابخانه بندازید.

    در کل بخاطر اینکه افراد و شرکت‌های زیادی پشت کتابخانه‌های Caffe و Torch7 بودن بقیه‌ی کتابخانه‌ها تقریباً عقب مونده بودن. ولی اخیراً احساس می‌کنم که کتابخانه‌های مبتنی بر Theano دارن جایگاه خودشون رو قوی‌تر می‌کنن. خیلی از مقالات اخیر با این کتابخانه‌های پیاده‌سازی شدن و همچنین پیاده‌سازی مقالات زیادی توسط افراد ثالث برای این کتابخانه‌ها انجام می‌گیره.

    هر چقدر گزینه‌ها برای کار کردن زیاد باشن، بهتره. امیدوارم که روز به روز کتابخانه‌ها پیشرفته‌تر و البته ورود به اون‌ها ساده‌تر بشه.

    فکر می‌کنم در روزهای آتی پست‌های متعددی داشته باشم.


  • Code.org

    24 Mar 2015

    به نام خدا

    شاید اسم برنامه‌ی «ساعتی با کد» یا "Hour of Code" رو شنیده باشید. هدف این برنامه اینه که در طی یک ساعت، تجربه‌ی ایجاد برنامه رو به افراد مختلف ارائه بکنه.
    سایت Code.org که موسس آن هادی پرتوی هست، مجری این برنامه در جهان هست. در این سایت افراد می‌تونن در قالب کاراکترهای مشهوری مانند پرنده‌های بازی Angry Birds یا کاراکترهای انیمیشن Frozen تکه‌کدهایی بنویسن و تجربه‌ی برنامه‌نویسی رو داشته باشن. دوره‌ی اول کدنویسی در این سایت که حداکثر شاید یک ساعت طول بکشه یک برنامه‌ی مفرح و شاد هست که فرد در طی اون در قالب یک محیط بازی، حرکت کاراکتر رو با استفاده از بلوک‌های اجرایی به عنوان تکه‌های کد، ایجاد می‌کنن. در این محیط فرد با استفاده از برنامه‌نویسی بلوکی، به جای نوشتن کد به صورت متن، با استفاده از کدهایی منطق بازی رو پیاده‌سازی می‌کنه. در طی این یک ساعت مفاهیمی مثل خط‌به‌خط اجرا شدن کد، تکرار در کد (loop) و همچنین شرط در اجرای کد آموزش داده میشن. بدلیل سادگی محیط، تموم‌کردن ساعتی با کد حتی برای بچه‌ها هم ممکنه و فکر می‌کنم براشون لذت‌بخش باشه. نکته‌ی جالبی که در مورد این برنامه هست اینه که نزدیک 108 میلیون نفر که بیشتر دانش‌آموز هستن تا به حال این برنامه رو انجام دادن و این برنامه از طرف افراد مهمی در تکنولوژی مثل بیل گیتس، استیو بالمر و مارک زاکربرگ تبلیغ و حمایت میشه. افراد مختلفی از قشرهای مختلف هم در فیلم‌های آموزشی این برنامه وجود دارن. مثلاً آموزش اولیه رو یک خانم مدل که برنامه‌نویس هم هست میده، یا شرط‌ها رو یک بسکتبالیست تدریس می‌کنه. این عمومیتی که در آموزش‌ها نمایش داده میشه به مردم نشون میده که هر کسی می‌تونه کد بنویسه و کسایی که کد می‌زنن آدمای عجیب‌غریبی نیستن. این بخصوص می‌تونه به دانش‌آموزها دید خوبی بده تا شاید حاضر بشن در آینده به علوم کامپیوتر بپردازن. با توجه به سیر تغییر دنیا، به نظر میرسه که آینده به مهندسان کامپیوتر بیش‌ازپیش نیاز خواهد داشت. حتی اگر کسی مهندس کامپیوتر هم نشد، باید حداقل سواد و شناختی در مورد سیستم‌های کامپیوتری که در همه‌جا وجود دارن داشته باشن.

    انجام این برنامه رو به خواهرم پیشنهاد دادم و بعد از اتمام موفقیت‌آمیز این برنامه، این مدرک بهش داده شد که باعث شد هم خوشحال بشه و هم مشتاق‌تر بشه و تصمیم بگیره که بقیه‌ی دوره‌های برنامه‌نویسی این سایت رو انجام بده.

    Code.org Hour of Code certificate

    من هم پیشنهاد می‌کنم این سایت رو به بچه‌های فامیل و آشنا و هر کسی که مشتاق باشه و یا از وسایل کامپیوتری استفاده بکنه معرفی بکنید، مطمئنم خیلی لذت خواهند برد و خیلی چیزها هم یاد خواهند گرفت.

    یک نکته‌ی مثبت دیگه هم اینه که این سایت نسخه‌ی فارسی هم داره. یادتون باشه از پایین صفحه زبان رو فارسی انتخاب کنید تا همه‌ی نوشته‌های سایت فارسی بشن. همچنین در این صورت زیرنویس ویدیوها هم فارسی میشه.

    امیدوارم که با همچین برنامه‌هایی، سواد عمومی از کامپیوترها حداقل در نسل آینده بیشتر باشه و کامپیوتر و گوشی و اینترنت رو فقط مساوی با وایبر و بازی‌هایی مثل Clash of Clans ندونیم (این دو تا رو گفتم چون فکر می‌کنم اینا بیشترین مصرف رو در جامعه‌ی ایران داشته باشن)


  • OpenCV آسان در ویندوز با استفاده از Ceemple

    به نام خدا

    OpenCV

    یکی از مهم‌ترین کتابخانه‌های پردازش تصویر و بینایی ماشین، کتابخانه‌ی OpenCV هست. این کتابخانه که با استفاده از C/C++ نوشته شده و بسیاری از الگوریتم‌های مورد نیاز برای پردازش تصویر، بینایی ماشین و یادگیری ماشین رو پیاده‌سازی کرده. این کتابخانه از بسیاری از سیستم‌های عامل و معماری‌های سخت‌افزاری پشتیبانی می‌کنه و تقریباً همه جا می‌تونید ازش استفاده بکنید. همچنین اگر با زبان C++ راحت نباشید، این کتابخانه رو میشه به راحتی از زبان‌های جاوا و پایتون هم صدا زد و استفاده کرد.

    با توجه به اینکه این کتابخانه از نظر حجم کد و همچنین وابستگی‌های خارجی به کتابخانه‌های دیگه، یک کتابخانه‌ی بسیار بزرگ به حساب میاد، بنابراین آماده‌کردن اون برای استفاده کار نسبتاً سختیه. برای اینکه بتونید از این کتابخانه استفاده بکنید، لازمه که کد این کتابخانه، به همراه کتابخانه‌های خارجی دیگری که کد به اونها وابسته هست کامپایل بشن تا بعد بشه ازشون استفاده کرد. این کار، بخصوص بر روی ویندوز نسبتاً سخت و وقت‌گیر هست. در این پست قصد دارم راه‌حل آسانی رو برای حل این مشکل معرفی کنم. OpenCV سخت در ویندوز رو بعداً توضیح خواهم داد.

    Ceemple OpenCV for Visual Studio

    دریافت این افزونه

    Ceemple OpenCV for Visual Studio

    Ceemple یک راه‌حل مناسب برای این مشکل ارائه داده. اونا یک extension برای ویژوال استودیو ارائه دادن که شامل OpenCV 3.0 کامپایل‌شده و آماده‌ی استفاده به همراه کتابخانه‌های جانبی مهمی مثل CUDA، OpenCL، OpenMP و IPP هست. شاید اطلاع داشته باشید که خود OpenCV هم DLLهای از پیش‌ساخته‌شده‌ی کتابخانه رو برای ویندوز ارائه میده. ولی این فایل‌ها، با حداقل استفاده از کتابخانه‌های جانبی بخصوص CUDA و IPP ارائه میشن که این موضوع باعث میشه این کتابخانه از تمام امکانات سخت‌افزاری برای پردازش بهره نبره. ولی در نسخه‌ای که Ceemple ارائه میده، این کتابخانه‌های مهم جانبی وجود دارن و شما می‌تونید از سرعت بیشتر اجرای کد بر روی پردازنده‌ یا پردازنده‌ی گرافیکی خودتون استفاده کنید.

    همچنین با نصب این افزونه، امکان ساخت پروژه‌های OpenCV به صورت مستقیم از درون ویژوال استودیو ایجاد میشه. به این ترتیب خیلی سریع و بدون نیاز به تنظیم دسترسی پروژه به فایل‌های header و dll و lib مربوط به OpenCV و کتابخانه‌های جانبی، می‌تونید شروع به کد زدن بکنید و به تولید برنامه بپردازید.

    New OpenCV project dialoge in VS

    علاوه بر نکات مثبت گفته شده، با نصب این افزونه، افزونه‌ی Image Watch هم بر روی ویژوال استودیو نصب میشه. این افزونه‌ی بسیار مفید به شما در هنگام debug کردن برنامه در ویژوال استودیو کمک می‌کنه. با استفاده از این افزونه، در هنگام debug کردن، می‌تونید تصاویری که در کدتون استفاده می‌کنید و بر روی حافظه هستن رو ببینید و به راحتی به جریان کدتون پی ببرید و مشکلات احتمالی رو به راحتی پیدا و رفع کنید. این افزونه بسیار افزونه‌ی مفیدیه و برای کارهای پردازش تصویر و بینایی ماشین بسیار توصیه میشه. (توضیح بیشتر در مورد Image Watch)

    Image Watch VS extension

    توجه: تصاویر برگرفته از سایت ceemple هستند.

    به‌روزرسانی 1

    با استفاده از biicode هم می‌تونید به سادگی از OpenCV استفاده کنید. در این لینک در این مورد توضیح داده شده.


  • نصب کتابخانه‌ی Theano در ویندوز

    به نام خدا

    یکی از مهم‌ترین برتری‌های زبان پایتون، مجموعه‌ی بسیار کامل کتابخانه‌هایی هست که برای کارهای مختلف در دسترس برنامه‌نویس هست. این موضوع باعث شده که برای کاربردهای بسیاری، بتوان کتابخانه‌های بسیار با کیفیتی پیدا کرد و از اونها استفاده کرد.

    یکی از حوزه‌هایی که از این مورد مستثنی نیست، موضوع کتابخانه‌های مربوط به یادگیری عمیق یا Deep Learning هست. از روی مشاهداتم می‌تونم بگم که بیشترین کتابخانه‌ها برای اینکار رو زبان پایتون داره و حتی اگر کتابخانه‌ای مثلاً در زبانی مثل C++ نوشته شده باشه، به احتمال زیادی یک پوشش (wrapper) برای زبان پایتون داره.

    یک منبع مناسب که تعدادی از کتابخانه‌های مربوط به یادگیری عمیق رو با هم مقایسه کرده، soumith/convnet-benchmarks هست. در اینجا می‌تونیم ببینیم که سهم زبان‌های Python و Lua در کنار زبان C++ از کتابخانه‌های با کیفیت و مطرح بالا است.

    مشکلی که بسیاری از این کتابخانه‌ها دارن اینه که با در نظر گرفتن ویندوز ایجاد نشدن. بخاطر همین نمیشه به راحتی خیلی از اونها رو در ویندوز استفاده کرد. برای کاری که می‌خوام انجام بدم تصمیم گرفتم این کتابخانه‌ها رو با هم مقایسه کنم و نهایت سعی‌ام رو بکنم که روی ویندوز اجراشون کنم. در ابتدا و بخاطر اینکه خیلی بیشتر ازش استفاده میشه، از کتابخانه‌ی Theano شروع کردم.

    معرفی Theano

    طبق تعریفی که در خود سایت نوشته شده، Theano «یک کتابخانه برای تعریف، بهینه‌سازی و اجرای عبارت‌های ریاضی شامل آرایه‌های چندبعدی به صورت بهینه است.»

    Theano is a Python library that allows you to define, optimize, and evaluate mathematical expressions involving multi-dimensional arrays efficiently.

    از ویژگی‌های این کتابخانه میشه به تعامل با کتابخانه‌ی NumPy (استفاده از numpy.ndarray)، استفاده از واحد پردازش گرافیکی برای تسریع عملیات، مشتق‌گیری سریع عبارت‌های ریاضی و همچنین تولید پویای کد به زبان C اشاره کرد. این کتابخانه توسط آزمایشگاه LISA دانشگاه مونترال کانادا تهیه میشه و معمولاً شامل جدیدترین الگوریتم‌ها و معماری شبکه‌های عمیق از جدیدترین مقالات هست.

    نصب Theano

    با وجود اینکه در ابتدا تصور می‌کردم نصب این کتابخانه، با توجه به اینکه از CUDA هم استفاده می‌کنه، در ویندوز کار بسیار سختی خواهد بود، ولی به هیچ عنوان اینگونه نبود. برای نصب این کتابخانه ابتدا آخرین نسخه‌ی کد رو با استفاده از دستور زیر از گیت‌هاب گرفتم:

    git clone https://github.com/Theano/Theano
    

    بعد از گرفتن کد مربوط به این کتابخانه، در مسیر کاربری خودم در ویندوز، یعنی C:\Users\<username>\، یک فایل با نام .theanorc ایجاد کردم تا بتونم در این فایل تنظیماتی رو به این کتابخانه بدم. تنظیمات مربوط به طور کامل در این آدرس نوشته شده. بعد از اینکه فایل تنظیمات مورد نظر رو تکمیل کردم (تنظیمات مربوط به CUDA رو هم اعمال کردم) با دستور زیر کتابخانه ساخت و نصب شد، به همین سادگی

    cd theano
    python setup.py install
    

    برای اینکه ببینید استفاده از کارت گرافیکی در این کتابخانه، به طور خاص، و کتابخانه، به طور عام درست ساخت و نصب شده، از آدرس زیر برنامه‌ی مورد نظر رو اجرا کنید:

    cd theano\misc
    python check_blas.py
    

    Pylearn2

    کتابخانه‌ی Pylearn2 یک کتابخانه‌ی یادگیری ماشین هست که بر روی کتابخانه‌ی Theano توسط آزمایشگاه LISA ایجاد شده. این کتابخانه به سرعت در حال تغییره و الگوریتم‌های بسیاری بهش اضافه میشن. به نظر میومد که نصب این کتابخانه چون وابسته به theano بود خیلی سخت نباشه، ولی اینطوری نبود. طبق معمول بقیه‌ی کتابخانه‌ها، کد این کتابخانه رو از روی گیت‌هاب گرفتم. بعد که خواستم نصبش کنم، با این خطا مواجه شدم که نمی‌تونست کامپایلر Microsoft Visual C++ 2008 یا همون VC90 رو پیدا بکنه. قبلاً هم این مشکل رو داشتم ولی تونسته بودم حلش کنم (در اینجا توضیح دادم چطوری)،ولی این بار متاسفانه مشکل به این راحتی حل نشد.

    با وجود اینکه تنظیمات رو تغییر دادم تا از کامپایلر Microsoft Visual C++ 2013 یا همون VC120 استفاده بشه، ولی باز درخواست کامپایر قدیمی رو می‌کرد. چاره‌ای نداشتم جز اینکه این کامپایلر رو نصب کنم. خوشبختانه برای حل این مشکل مایکروسافت یک دانلود کم حجم از این نسخه از کامپایلر برای پایتون 2.7 قرار داده. از این آدرس میشه این نسخه از کامپایلر رو دانلود کرد. بعد از نصب این نسخه‌ی قدیمی از کامپایلر مشکل پیدا کردنش حل شد، ولی در کل استفاده از چنین نسخه‌ی قدیمی مشکل‌سازه. از توی کد کتابخانه نتونستم چیزی پیدا کنم که مربوط به محدودیت استفاده از این نسخه از کامپایلر باشه، بنابراین حدس می‌زنم که مشکل از setuptools پایتون هست. بعد از کمی جستجو و پیدا کردن پروژه‌ای موسوم به Python Wheels حدسم قوت گرفت. فکر می‌کنم مشکل از همین باشه و این پروژه سعی داره این مشکل رو حل بکنه. فعلاً که خیلی از کتابخانه‌های مطرح پایتون از این پروژه پشتیبانی نمی‌کنن، چه برسه به پروژه‌ای مثل Pylearn2. خلاصه در نهایت مجبور به استفاده از همین نسخه از کامپایلر شدم.

    بعد از حل مشکل اومدم و طبق گفته‌ی سایت از دستور زیر برای نصب استفاده کردم

    python setup.py develop
    

    ولی در نهایت تاسف، با پیام خطای زیر در مورد یکی از فایل‌ها مواجه شدم.

    LINK : fatal error LNK1181: cannot open input file 'Vault\Github\pylearn2\pylearn2\utils\_window_flip.pyd'
    error: Command "C:\Users\Erfan\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:C:\Anaconda\libs /LIBPATH:C:\Anaconda\PCbuild\amd64 /EXPORT:init_window_flip build\temp.win-amd64-2.7\Release\pylearn2/utils\_window_flip.obj /OUT:E:\Code Vault\Github\pylearn2\pylearn2\utils\_window_flip.pyd /IMPLIB:build\temp.win-amd64-2.7\Release\pylearn2/utils\_window_flip.lib /MANIFESTFILE:build\temp.win-amd64-2.7\Release\pylearn2/utils\_window_flip.pyd.manifest" failed with exit status 1181
    

    راستش فعلاً پیدا نکردم که مشکل از چیه و چطوری میشه حلش کرد (به صورت اصولی)، ولی به جاش از دستور زیر برای نصب استفاده کردم و بدون مشکل کتابخانه نصب شد

    python setup.py install
    

    بعد از این کار و نصب ظاهراً موفق این کتابخانه، با اجرای دستور import pylearn2، پیام اخطاری مشاهده نشد. بنابراین احتمالاً بدون خطا نصب شده. البته باید بیشتر از کتابخانه استفاده بکنم تا بفهمم که آیا درست نصب شده یا نه.

    Lasagne, blocks

    این دو کتابخانه به طور خاص برای ساخت شبکه‌های عصبی و بخصوص شبکه‌های عمیق ساخته شدن. هر دو مبتنی بر Theano هستن و هدف هر دو ساده‌تر کردن و ماژولار کردن ساخت این شبکه‌ها و پیاده‌سازی یادگیری این شبکه‌ها است.

    نصب این دو کتابخانه هم خیلی ساده بود. بعد از این که کد هر کدوم رو از گیت‌هاب گرفتم، با دستور python setup.py install هر دو به سادگی نصب شدن.

    جمع‌بندی

    در نهایت همونطوری که گفتم، تونستم یکی از کتابخانه‌های مهم پایتون و همچنین سه تا از کتابخانه‌های مهم یادگیری عمیق رو بر روی ویندوز نصب کنم.

    لازم هست بگم که از Windows 8.1 Pro x64 و CUDA 6.5 بر روی nVidia Quadro K1100M استفاده می‌کنم. همچنین پایتون رو با استفاده از Anaconda روی ویندوز نصب کردم؛ نسخه‌ی 2.7.6 پایتون بر روی Anaconda نسخه‌ی 2.0 به طور دقیق‌تر. نصب پایتون رو از این طریق خیلی پیشنهاد می‌کنم. چون بسیاری از کتابخانه‌های مهم پایتون همراه باهاش نصب میشن و یه IDE خوب به نام Spyder هم نصب میشه که خیلی می‌تونه کمک دست خوبی باشه.

    این از مرحله‌ی نصب این کتابخانه‌ها که به نظر می‌رسه با موفقیت به اتمام رسید. حالا می‌مونه استفاده از این کتابخانه‌ها و کار مفید انجام دادن باهاشون که البته مرحله‌ی مهم‌تریه.

    در آینده، انشالله، بیشتر در موردشون خواهم نوشت.


  • کامپیوترهایی که یاد می‌گیرند

    به نام خدا

    امروز یک ویدیو بسیار جالب از TEDxBrussels میدیدم در مورد کامپیوترهایی که می‌توانند یاد بگیرند. جای تعجب نداره که صحبت در مورد پیشرفت‌هایی بود که از طریق به کارگیری چارچون یادگیری موسوم به یادگیری عمیق (Deep Learning) به دست آمده. باز صحبت در مورد این بود که کامپیوترها قراره بسیاری از شغل‌های انسانی رو در اختیار بگیرن. ولی در این صحبت روی دو جنبه‌ی دیگه هم بحث کوتاهی شد که کمتر قبلاً دیده بودم.

    اول اینکه انسان به همراه کامپیوتر در بسیاری از کارها می‌تونن بسیار کارآمدتر و هوشمندتر عمل کنن. این دید متفاوتیه از این دید غالب و تاریخی که کامپیوترها رو در مقابل انسان‌ها قرار میده. البته بحث در مورد اینکه آیا واقعاً روزی کامپیوترهای هوشمند در مقابل انسان قرار خواهند گرفت یک بحث طولانی هست که نیاز به چند پست دیگه و مطالعات بیشتری از جانب من داره. ولی این دید حداقل در چشم‌انداز آینده‌ای نزدیک دیدی هست که می‌تونه بسیار مفید باشه و چیزی هست که واقعاً باهاش مواجه خواهیم شد. در این مورد یک demo خیلی جالب هم نشون میده.

    موضوع دیگه، هر چند مرتبط به موضوع قبلی، در مورد اثر کامپیوترها بر کشورهای کمتر توسعه ‌یافته یا بهتره بگم کشورهای غیر جهان اول هست. اگر به توزیع شغل‌ها در این کشورها نگاهی بیاندازیم، بیشتر ای شغل‌ها به سرعت و راحتی می‌تونن با سیستم‌های کامپیوتری جایگزین بشن و این کار می‌تونه اثر بسیار بزرگی بر اقتصاد این کشورها که بیشتر جمعیت دنیا رو هم تشکیل میدن داشته باشه.

    به هر حال مسئله‌ی هوشمند شدن سیستم‌های کامپیوتری مسئله‌ای هست که بشر برای اولین بار داره در طول تاریخ باهاش مواجه میشه و باید برای عواقب این تغییر آماده باشیم و در موردش فکر کرده باشیم. الان میشه گفت کامپیوترها در بیشتر کارها به حد بالایی از هوشمندی رسیدن و با نرخ بالایی هوشمندی اونها داره بالاتر هم میره. پس در وحله‌ی اول باید در مورد رفتارمون در مقابل این هوشمندی و اثراتش فکر کنیم و چاره بیاندیشیم. و به این موضوع هم توجه کنیم که هوشمندی مقوله‌ای جدا از خودآگاهیه.

    این هم ویدیویی که در موردش گفتم، با سخنرانی آقای Jeremy Howard


  • سال 2014 با پاکت

    17 Dec 2014

    به نام خدا

    امروز ایمیلی از طرف پاکت بهم رسید که در اون نوشته شده بود من جزو Top 5% readers پاکت شدم.

    Year in Pocket total stats

    به همین مناسبت صفحه‌ای نیز درست کردن که توی این صفحه به طور خلاصه گزارشی از کاربری از این سرویس در سال گذشته نشون داده میشه.

    My 2014 Year in Pocket

    Year in Pocket weekly stats

    امیدوارم در سال بعد، یعنی سال 2015، بیشتر مطالعه داشته باشم، هم با استفاده از این سرویس، هم به طرق دیگه.


  • 1024 vs. 1000

    07 Dec 2014

    به نام خدا

    راستش رو بخوایید من هم هنوز دقیق نمی‌دونم وقتی به مدل‌های مختلفی می‌نویسن منظور کدومه.

    1024 vs. 1000


  • دومین سالگرد وبلاگ :)

    17 Oct 2014

    به نام خدا

    امروز دومین سالگرد اون یکی وبلاگمه. دو سال پیش در همین روز بود که اولین پستم رو توی اون بلاگ منتشر کردم.امروز به مناسبت دومین سالگرد چون حوصله‌ی پست نوشتن اونجا رو نداشتم، یعنی در واقع حوصله‌ی پست‌نویسی به سبک اونجا رو نداشتم، تصمیم گرفتم اینجا در مورد اون بلاگ بنویسم.

    البته نوشتن که چه عرض کنم، بیشتر با چند تا عدد بازی کنم و یه چندتایی نمودار بکشم. هدف بیشتر کار با matplotlib بود تا کار مهم دیگه‌ای.

    تو این مدت دو ساله، 77 پست رو ارسال کردم تو اون یکی بلاگم

    Timeline post distribution

    Timeline post distribution

    خیلی واضحه از روی پست که در یکسال اول، خیلی بیشتر از یکسال دوم پست نوشتم. شاید نشون میده که یکسال دوم، یعنی از یکسال پیش، آرامیش بیشتری به زندگیم حاکم بوده. از طرف دیگه شاید بشه گفت که هیجان زندگیم کمتر شده، چیز کمتری بوده تو زندگیم که در موردش بنویسم. البته اگر به آخرهای این مدت زمان نگاهی بندازیم، میبینیم که باز شروع کرده بودم به مرتب نوشتن، ولی باز از حوصله افتادم و الان خیلی وقته که ننوشتم. درسته که فقط دوبار اتفاق افتاده، ولی شاید این تحلیل رو هم بشه کرد که در نزدیکی‌های سالگردها، خیلی کمتر نوشتم.

    از نظر زمانی فکر می‌کردم بیشتر پست‌هام رو در روزهای آخر هفته می‌نوشتم. ولی این نمودار چیز دیگه‌ای رو نشون میده

    Weekly post distribution

    اینطوری که مشخصه بیشترین پست‌هام رو در روز دوشنبه منتشر کردم. هر چند آخرهفته‌ها هم فعال بودم.

    یه موضوع دیگه‌ای که مطرحه اینه که بیشتر در چه زمان‌هایی از شبانه‌روز اقدام به ارسال پست می‌کردم؟ حدس خودم اینه که شب‌ها بیشتر می‌نوشتم. داده‌ها هم این حدس رو تایید می‌کنن.

    Daily post distribution

    البته خیلی هم مطابقت نداره با حدسم. بیشترین پست‌ها رو ساعت 20 شب منتشر کردم. در حالی که من حدس می‌زدم زمان ارسال‌هام چند ساعتی دیرتر باشن. این نکته هم جالبه که ساعت 2 و 3 بامداد و همچنین نیمه‌ی روز هیچوقت ارسال پست نداشتم.

    موضوع بعدی که دوست داشتم در مورد پستم بدونم این بود که چقدر می‌نویسم؟ خودم که همیشه دوست دارم پست‌هایی که می‌نویسم یا می‌خونم طولانی باشن، بخاطر همین حدس می‌زنم بیشتر پست‌هام طولانی باشن. ولی چقدر طولانی؟ از روی بررسی پست‌ها مشخص میشه که طولانی‌ترین پستم از 4170 کلمه‌ تشکیل شده. فکر می‌کنم خیلی کم نباشه :دی

    نمودار پایین هم توزیع پست‌ها بر اساس طولشون رو نشون میده. هر دسته بازه‌ای به طول 400 کلمه است.

    Daily post distribution

    نکته‌ی دیگه‌ای که بهش پرداختم، بررسی رابطه‌ی بین طول پست و زمان ارسال پست بود. یعنی بعضی شبا که میشینم، با خودم هی فکر می‌کنم، آیا نتیجه‌اش این میشه که پست‌های طولانی می‌نویسم؟ محور عمودی طول پست، و محور افقی زمان ارسال پست هست. شکل پایین این موضوع رو بررسی کرده.

    Post length vs. Publishing time scatter plot

    یا اگر جور دیگه‌ای بهش نگاه کنیم، اینطوری:

    Post length vs. Publishing time hex plot

    این نمودار آخر به خوبی این ارتباط رو نشون میده. این که بیشتر شب‌ها پست‌های طولانی‌تری می‌نویسم.البته چون داده‌های زمانی ه صورت ترتیبی نیستن، بلکه دوری هستن، نمیشه یک رابطه‌ی خطی بینشون پیدا کرد. اگر بتونم راه‌حلی برای این مورد پیدا کنم، سعی می‌کنم فرمولی برای این رابطه به دست بیارم.

    بجز این موارد چیز دیگه‌ای به ذهنم نرسید. یعنی بیشتر به تحلیل متن احتیاج داشتم، ولی همچین چیزی فعلاً بلد نیستم. تنها کاری که تونستم انجام بدم این بود که ماتریس شباهت پست‌هام رو به هم پیدا کردم. در شکل پایین ماتریس شباهت پست‌ها رو می‌بینید.

    Post Similarity Matrix

    انتظار دیدن همچین چیزی رو نداشتم. به طرز عجیبی بین سه تا از پست‌ها شباهت زیادی وجود داره، یعنی پست‌های "یه دوست خاص"، "متاسفم"، و "عصبانی". برام این موضوع خیلی عجیب بود. چون نباید این اتفاق میوفتاد. اینقدر شباهت در متن پست‌ها خیلی عجیبه. در نتیجه تصمیم گرفتم متن این پست‌ها رو به دقت و از نزدیک بررسی کنم. وقتی که این کار رو کردم به این نوشته در همه‌شون رسیدم:

    برای نمایش مطلب باید رمز عبور را وارد کنید

    و اینطوری بود که از راز شباهت این سه پست هم پرده برداشته شد :دی

    اگر بهتر به این ماتریس نگاه کنیم، تعدادی پست‌ها هستن که خیلی با پست‌های دیگه تفاوت دارن. اینا پست‌هایی هستن که توشون کلمات انگلیسی زیادی به کار برده شده. ولی بین بعضی دیگر از پست‌ها شباهت‌های خوبی هست. نیاز هست که دقیق‌تر این پست‌ها رو باز بررسی کنم.

    نکته‌ی جالبی که رخ داد اینه که بیان دسترسیم رو بلاگم قطع کرده بخاطر اینکه درخواست زیاد فرستادم.