আমি গিথুব (লিঙ্ক) এ একটি LSTM ভাষার মডেলের এই উদাহরণটি দিয়ে যাচ্ছিলাম । এটি সাধারণভাবে যা করে তা আমার কাছে বেশ পরিষ্কার। তবে আমি কলিং কী করে contiguous()
তা বোঝার জন্য এখনও লড়াই করছি , যা কোডে বেশ কয়েকবার আসে।
উদাহরণস্বরূপ, এলএসটিএম এর কোড ইনপুট এবং টার্গেট সিকোয়েন্সগুলির লাইন /৪/75৫ তৈরি করা হয়েছে। ডেটা (সঞ্চিত ids
) 2-মাত্রিক যেখানে প্রথম মাত্রা ব্যাচের আকার।
for i in range(0, ids.size(1) - seq_length, seq_length):
# Get batch inputs and targets
inputs = Variable(ids[:, i:i+seq_length])
targets = Variable(ids[:, (i+1):(i+1)+seq_length].contiguous())
সুতরাং একটি সাধারণ উদাহরণ হিসাবে, ব্যাচ আকার 1 এবং seq_length
10 ব্যবহার করার সময় inputs
এবং এর targets
মতো দেখায়:
inputs Variable containing:
0 1 2 3 4 5 6 7 8 9
[torch.LongTensor of size 1x10]
targets Variable containing:
1 2 3 4 5 6 7 8 9 10
[torch.LongTensor of size 1x10]
সুতরাং সাধারণভাবে আমার প্রশ্নটি হল, আমার কী contiguous()
প্রয়োজন এবং কেন এটি দরকার?
পরবর্তী আমি বুঝতে পারি না কেন পদ্ধতিটিকে লক্ষ্য সিকোয়েন্সের জন্য ডাকা হয় এবং ইনপুট ক্রম নয় কারণ উভয় ভেরিয়েবল একই ডেটা নিয়ে গঠিত।
কীভাবে অসংলগ্ন হতে targets
পারে এবং inputs
এখনও স্বচ্ছন্দ হতে পারে ?
সম্পাদনা:
আমি কলিং ছাড়ার চেষ্টা করেছি contiguous()
, কিন্তু ক্ষতির হিসাব করার সময় এটি একটি ত্রুটি বার্তা নিয়ে যায়।
RuntimeError: invalid argument 1: input is not contiguous at .../src/torch/lib/TH/generic/THTensor.c:231
সুতরাং স্পষ্টতই contiguous()
এই উদাহরণে কল করা প্রয়োজনীয়।
(এই পঠনযোগ্যটি ধরে রাখার জন্য আমি এখানে পূর্ণ কোড পোস্ট করা এড়িয়ে গিয়েছি, এটি উপরের গিটহাব লিঙ্কটি ব্যবহার করে পাওয়া যাবে))
আগাম ধন্যবাদ!
tldr; to the point summary
বিন্দুর সংক্ষিপ্তসারকে সংক্ষিপ্ত করে একটি লেখার পরামর্শ দিচ্ছি ।