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

با تشکر

دسته بندی ها

0 امتیاز

با سلام
من میخوام روی هر کدام از درایه های یک تنسور در شبکه عصبی یک تابع خاص اعمال کنم. چطوری میتونم به درایه ها ی یک تنسور در تنسورفلو دسترسی داشته باشم. حلقه for نوشتم ولی خطا داشت!!

توسط (106 امتیاز)

1 پاسخ

0 امتیاز

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

1- از همون indexing شبیه numpy با for میشه استفاده کرد به شرط اینکه بقیه موارد هم درست باشه. مثلا این خطا میده

for i in range(10):
     my_tensor[i] = f(my_tensor[i])

به خاطر بحث assignment و اینجور چیزا که باید درست رعایت بشه. ولی با یه سری تغییرات که البته بهترین روش نیست میشه درستش کرد

my_output = []
for i in range(10):
    my_output.append(f(my_tensor[i])
my_output_tensor = tf.stack....

باید به دید این بهش نگاه کرد الان گراف محاسباتی که می خواد ساخته بشه چه فرمی داره و هر نود داره چی کار می کنه و ...

2- از tf.unstack استفاده کنید و تنسور بشه لیستی از تنسورها (که اینجا باید اینقدر unstack کنید که هر تنسور فقط یه المان بشه) بعدش روی لیست خروجی می تونید for بزنید. این روش هم یه جوری همون روش بالاییه ولی تر و تمیز تر شده
نمونه اش توی این سوال مطرح شده:

https://stackoverflow.com/questions/43327668/looping-over-a-tensor

3- بازم تابع توی تنسورفلو هست که میشه ازش استفاده کرد. نمونش split ه. که بهش می گید یه آرایه رو از کجا و به چه تعداد قسمت کنه (که میشه بگید به تعداد المان ها قسمت کنه که هر المان رو جدا جدا داشته باشید)
مثلا توی کد مقاله DRAW برای قسمت guassian attention نیازه که مثلا به یه قسمت log اعمال بشه یه قسمت exp و ....
یه تابع مشابه این میشه براش تعریف کرد

def decode(raw_parameters):
    # Raw parameters = [u_y, log_sigma2_y, log_delta_y, u_x, log_sigma2_x, log_delta_x]
    
    with tf.name_scope('decode_spatial_params'):
        #Split parameters
        split_axis = raw_parameters.shape.ndims - 1
        u_y, log_sigma2_y, log_delta_y, u_x, log_sigma2_x, log_delta_x = \
            tf.split(raw_parameters, 6, split_axis)

        #Apply activation functions
        u_y = tf.nn.tanh(u_y)
        u_x = tf.nn.tanh(u_x)
        
        sigma2_y = tf.exp(log_sigma2_y)
        sigma2_x = tf.exp(log_sigma2_x)
        
        delta_y = tf.exp(log_delta_y)
        delta_x = tf.exp(log_delta_x)
        
        decoded_params = tf.concat([u_y, sigma2_y, delta_y, u_x, sigma2_x, delta_x], -1)
        return decoded_params

اینجا فرض بر اینه که raw_parameters مثلا همون تنسوریه که می خواید روی هر المانش یه تابع اعمال کنید و اینجا 6 تا المان داره که با split جداشون کردیم، یه سری تابع روی هر کدوم اعمال کردیم و دوباره concat کردیم فرستادیم بره
اینجا تعداد المان ها خیلی کم بوده و دستی همه چیز جدا شده اما میشه براش for هم نوشت

4- استفاده از توابعی مثل gather و slice و ....

5- از pytorch استفاده کنیم که این کارا توش راحت تره D:

توسط (1.6k امتیاز)
...