تفاوت تنسورهای PyTorch با آرایه های NumPy


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

کتابخانه نامپای (NumPy)

NumPy یک  کتابخانه پایتون است که کاربرد اصلی‌اش در مقاصد علمی و برای کار با اعداد است. تقریبا در numpy یک شیء آرایه‌ای چند بعدی (ndarray) ارائه می‌دهد که از آن برای ذخیره و عملیات روی آرایه های عددی استفاده می‌شود. قبلا در پست “ آشنایی با کتابخانه numpy” در مورد ویژگی های مربوط به آرایه های نامپای صحبت کرده ایم.

کتابخانه پایتورچ (PyTorch)

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

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

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

تنسورها هم ویژگی مهم آرایه‌های نامپای یعنی broadcasting را دارند.

broadcasting در تنسورها

تفاوت بین تنسورهای پایتورچ و آرایه های نامپای

تنسورهای پایتورچ بسیار شبیه به آرایه های نامپای هستند اما با دو تفاوت اصلی. که همین باعث قدرتمند شدن کتابخانه پایتورچ شده است. در ادامه این دو ویژگی مهم تنسورهای پایتورچ رو توضیح میدهیم.

تنسورها قابلیت اجرا روی GPU و CPU را دارند

مهمترین تفاوت بین یک آرایه نامپای و تنسور پایتورچ اینه که یک تنسور پایتورچ هم میتونه روی CPU و هم روی GPU یا سایر سخت افزارهای شتاب دهنده اجرا شود. این ویژگی باعث میشه سرعت محاسبات بسیار بالاتر باشه.

تنسورها قابلیت اجرا روی GPU و CPU را دارند

تنسورها برای مشتق گیری خودکار بهینه شده اند

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

تنسورها برای مشتق گیری خودکار بهینه شده اند

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

نحوه تبدیل آرایه نامپای به تنسور پایتورچ

باید به این نکته توجه کنیم که نوع داده در تنسورهای پایتورچ float32 است، این درحالی هست که در آرایه های نامپای float64 هست. برای اینکه در پردازش ها و عملیات محاسباتی به مشکل نخوریم حتما باید بعد از تبدیل یک آرایه نامپای به تنسور پایتورچ، نوع آن را به float32 تغییر بدیم.

Python

tensor= torch.from_numpy(NumPy_arrary).type(torch.float32)

نحوه تبدیل تنسور پایتورچ به آرایه نامپای

قبل از تبدیل تنسور پایتورچ به آرایه نامپای، باید نوع آن را به float64 تبدیل کنیم.

Python

NumPy_arrary = tensor.type(torch.float64).numpy()

 

در مثال زیر یک آرایه نامپای ساختیم، سپس آنرا به یک تنسور پایتورچ تبدیل کردیم. در انتها هم مجدد به آرایه نامپای تبدیل کردیم.

Python

#%% import libraries
import numpy as np
import torch
rng=np.random.default_rng(1)

#%% create a NumPy array
arr= rng.random((2,3))
print(arr,arr.dtype)
>>>
    [[0.51182162 0.9504637  0.14415961]
     [0.94864945 0.31183145 0.42332645]] float64

#%% convert a NumPy array to a PyTorch tensor
t= torch.from_numpy(arr).type(torch.float32)
print(t,t.dtype)
>>>
    tensor([[0.5118, 0.9505, 0.1442],
            [0.9486, 0.3118, 0.4233]]) torch.float32

#%% convert a PyTorch tensor to a NumPy array
arr_new= t.type(torch.float64).numpy()
print(arr_new,arr_new.dtype)
>>>
    [[0.51182163 0.95046371 0.14415962]
     [0.94864947 0.31183144 0.42332646]] float64



دیدگاه ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

code

1 دیدگاه

  1. […] و سپس شبکه های عصبی را روی آنها اعمال کنیم.  در پست “تفاوت تنسورهای PyTorch با آرایه های NumPy” نحوه تبدیل آرایه های NumPy به تنسورهای PyTorch را توضیح […]