Tf.placeholder এবং tf. পরিবর্তনশীল মধ্যে পার্থক্য কি?


290

আমি টেনসরফ্লো এর নবাগত। আমি tf.placeholderএবং এর মধ্যে পার্থক্য সম্পর্কে বিভ্রান্ত tf.Variable। আমার দৃষ্টিতে, tf.placeholderইনপুট ডেটার tf.Variableজন্য ব্যবহৃত হয় এবং ডেটার স্থিতি সঞ্চয় করতে ব্যবহৃত হয়। এটাই আমি জানি।

কেউ কি তাদের পার্থক্য সম্পর্কে বিস্তারিতভাবে আমাকে ব্যাখ্যা করতে পারেন? বিশেষত, কখন ব্যবহার করবেন tf.Variableএবং কখন ব্যবহার করবেন tf.placeholder?


7
স্বজ্ঞাতভাবে, আপনি Variables এর ক্ষেত্রে সম্মিলিত গ্রেডিয়েন্ট চাইবেন তবে placeholderগুলি নয় (যার মান অবশ্যই সর্বদা সরবরাহ করা উচিত)।
ইয়েবো ইয়াং

Cs231n.stanford.edu এর মতো একটি কোর্স তাদের বিভ্রান্ত করতে সহায়তা করতে পারে। আমি এটা অনেক পছন্দ করি! স্পষ্টতই অন্যরা রয়েছেন
নাথান

উত্তর:


175

সংক্ষেপে, আপনি tf.Variableআপনার মডেলের জন্য ওয়েট (ডাব্লু) এবং বায়াসেস (বি) এর মতো প্রশিক্ষণযোগ্য ভেরিয়েবলগুলির জন্য ব্যবহার করেন ।

weights = tf.Variable(
    tf.truncated_normal([IMAGE_PIXELS, hidden1_units],
                    stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))), name='weights')

biases = tf.Variable(tf.zeros([hidden1_units]), name='biases')

tf.placeholder প্রকৃত প্রশিক্ষণের উদাহরণগুলি খাওয়ানোর জন্য ব্যবহৃত হয়।

images_placeholder = tf.placeholder(tf.float32, shape=(batch_size, IMAGE_PIXELS))
labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))

প্রশিক্ষণের সময় আপনি প্রশিক্ষণের উদাহরণগুলি এভাবে খাওয়ান:

for step in xrange(FLAGS.max_steps):
    feed_dict = {
       images_placeholder: images_feed,
       labels_placeholder: labels_feed,
     }
    _, loss_value = sess.run([train_op, loss], feed_dict=feed_dict)

তোমার tf.variablesপ্রশিক্ষিত করা হবে (সংশোধিত) এই প্রশিক্ষণের ফলে।

Https://www.tensorflow.org/versions/r0.7/tutorials/mnist/tf/index.html এ আরও দেখুন । (উদাহরণগুলি ওয়েব পৃষ্ঠা থেকে নেওয়া হয়েছে))


2
আমি যদি আমার চিত্রটি খাওয়ার আগে প্রাকপ্রসেস করতে চাই তবে কী হবে? (যেমন কনট্রাস্টটি পুনরুদ্ধার করুন)। আমি কি এখন এই জন্য একটি পরিবর্তনশীল প্রয়োজন? যদি তা হয় তবে এর কি কোনও স্মৃতি বা গতির অন্তর্ভুক্ত রয়েছে?
বাসটিয়ান

1
আপনার যে কোনও প্রিপ্র্রোসেসিং ডেটাটি টেনসরফ্লো গ্রাফে (যেমন নেটওয়ার্ক) ফিড করার আগে আসবে, যাতে সেই কাজের জন্য টেনসরফ্লো থেকে কোনও কোড সরঞ্জামের প্রয়োজন হয় না। উদাহরণস্বরূপ একটি ভেরিয়েবল অপ্রয়োজনীয় ১ হতে হবে কারণ এটি ইনপুট ডেটা, যা গ্রাফের মধ্যে tf. placeholders (ভেরিয়েবল নয়) এর মধ্য দিয়ে যায় এবং নেটওয়ার্কের মাধ্যমে বর্তমান পাসের জন্য কোনও স্থানধারককে লোড করার আগে প্রাক প্রসেসিং হয় occurs ।
পলজি

আমি এই উত্তরটি কতটা প্রশংসা করেছি তা নোট করতে চেয়েছিলেন। আসলে সেখানে প্রশ্নে চেয়ে এই উত্তরে এ পর্যন্ত কম upvotes হয় যে শুধু দেখাতে কিভাবে তাত্ক্ষণিক পরিতৃপ্তি মানুষ হতে পারে যায়, এবং কিভাবে প্রচলিতো ট্যাগ মত tensorflowএবং deep learningএবং AIহয়।
নাথন

70

পার্থক্য হ'ল tf.Variableআপনি যখন এটি ঘোষণা করবেন তখন আপনাকে প্রাথমিক মান সরবরাহ করতে হবে। সঙ্গে tf.placeholderআপনি একটি প্রাথমিক মান প্রদান করতে হবে না এবং আপনি এটি দিয়ে রান সময়ে নির্দিষ্ট করতে পারেন feed_dictযুক্তি ভিতরেSession.run


63
-1। সত্য হিসাবে, এটি পয়েন্টটি মিস করে। আরও গুরুত্বপূর্ণ পার্থক্যটি টেনসরফ্লোয়ের মধ্যে তাদের ভূমিকা। চলকগুলি সময়ের সাথে সাথে প্রশিক্ষিত হয়, স্থানধারকরা হ'ল ইনপুট ডেটা যা আপনার মডেল ট্রেনগুলির হিসাবে পরিবর্তন হয় না (যেমন চিত্রগুলির জন্য ইনপুট চিত্র এবং শ্রেণীর লেবেল)। সুং কিমের উত্তর যেমনটি বলেছে, আপনি আপনার মডেলটিতে ওজন এবং বায়াস জন্য ভেরিয়েবল ব্যবহার করেন (যদিও এটি সীমাবদ্ধ নয় - স্টাইল ট্রান্সফারের জন্য, আপনি সময়ের সাথে সাথে একটি চিত্রকে অনুকূলিত করেন)।
ক্রিস অ্যান্ডারসন

@ ক্রিস অ্যান্ডারসন আমরা কি বলতে পারি যে এই চিত্রণটি ভুল ?! youtu.be/MotG3XI2qSs?t=136
N0rA

@ ক্রিসঅ্যান্ডারসন কেন এটি বিবেচনা করে যে এটির জন্য কী ব্যবহার করা হয়েছিল তা বোঝা যায়, যদি পার্থক্য কেবলমাত্র একটির প্রাথমিক মূল্য প্রয়োজন?
স্বর্ণের নাম

1
@ গোল্ডনেম এটির জন্য "ব্যবহৃত" যা ব্যবহার করা উচিত তা নয় - এটি সম্ভব এবং সম্ভব নয়। তারা সম্পূর্ণ ভিন্ন জিনিস। এগুলি বিনিময়যোগ্য নয় এবং পার্থক্যগুলি "একজনের প্রাথমিক মানের প্রয়োজন" এর চেয়ে বেশি।
ক্রিস অ্যান্ডারসন

61

যেহেতু টেনসর গণনাগুলি গ্রাফগুলি রচনা করে তারপরে গ্রাফের ক্ষেত্রে দুটি ব্যাখ্যা করা ভাল।

উদাহরণস্বরূপ সহজ লিনিয়ার রিগ্রেশন গ্রহণ করুন

WX+B=Y

যেখানে Wএবং Bওজন এবং পক্ষপাত এবং Xপর্যবেক্ষণ 'ইনপুট এবং Yপর্যবেক্ষণ' আউটপুট জন্য দাঁড়ানো ।

স্পষ্টতই Xএবং Yএকই প্রকৃতির (ম্যানিফেস্ট ভেরিয়েবল) যা এর থেকে Wএবং B(সুপ্ত ভেরিয়েবল) থেকে পৃথক । Xএবং Yনমুনার (পর্যবেক্ষণ) এবং অত: পর একটি প্রয়োজন মান জায়গা পূরণ করা , যখন Wএবং Bহয় ওজন ও পক্ষপাত, ভেরিয়েবল গ্রাফ যা বিভিন্ন ব্যবহার প্রশিক্ষণ দেওয়া উচিত (পূর্ববর্তী মান আধুনিক প্রভাবিত) Xএবং Yজোড়া। ভেরিয়েবলগুলি প্রশিক্ষণের জন্য আমরা স্থানধারীদের কাছে বিভিন্ন নমুনা রাখি ।

আমরা কেবলমাত্র প্রয়োজন সংরক্ষণ করুন অথবা পুনঃস্থাপন ভেরিয়েবল (চেকপয়েন্ট কোণে) সংরক্ষণ করুন অথবা কোড সহ গ্রাফ পুনর্নির্মাণের।

স্থানধারকরা বেশিরভাগই বিভিন্ন ডেটাসেটের (যেমন প্রশিক্ষণ ডেটা বা পরীক্ষার ডেটা) জন্য ধারক। তবে, ভেরিয়েবলগুলি নির্দিষ্ট কাজের জন্য প্রশিক্ষণ প্রক্রিয়াতে প্রশিক্ষিত হয়, অর্থাৎ ইনপুটটির ফলাফল সম্পর্কে ভবিষ্যদ্বাণী করতে বা পছন্দসই লেবেলে ইনপুটগুলি ম্যাপ করতে। আপনি ডেস্কের মাধ্যমে প্রায়শই প্লেসহোল্ডারগুলিতে পূরণ করতে বিভিন্ন বা একই নমুনা ব্যবহার করে মডেলটিকে পুনরায় প্রশিক্ষণ বা ফাইন-টিউন না করা পর্যন্ত সেগুলি একই থাকে । এই ক্ষেত্রে:

 session.run(a_graph, dict = {a_placeholder_name : sample_values}) 

স্থানধারকগুলিও মডেল সেট করতে পরামিতি হিসাবে পাস করা হয় are

যদি আপনি প্রশিক্ষণের মাঝে কোনও মডেলের স্থানধারক (যুক্ত, মুছুন, আকৃতি পরিবর্তন করুন) পরিবর্তন করেন তবে আপনি অন্য কোনও পরিবর্তন ছাড়াই চেকপয়েন্টটি পুনরায় লোড করতে পারেন। তবে যদি কোনও সংরক্ষিত মডেলের ভেরিয়েবলগুলি পরিবর্তন করা হয় তবে আপনার চেকপয়েন্টটি পুনরায় লোড করার জন্য এবং প্রশিক্ষণটি চালিয়ে যাওয়ার জন্য যথাযথভাবে সামঞ্জস্য করা উচিত (গ্রাফে বর্ণিত সমস্ত ভেরিয়েবলগুলি চেকপয়েন্টে পাওয়া উচিত)।

সংক্ষিপ্তসার হিসাবে, যদি মানগুলি নমুনাগুলির থেকে থাকে (আপনার কাছে ইতিমধ্যে পর্যবেক্ষণ রয়েছে) তবে আপনি সেগুলি ধরে রাখার জন্য নিরাপদে একটি স্থানধারক বানাচ্ছেন, যখন আপনার যদি প্রয়োজন প্যারামিটারের প্রশিক্ষণের জন্য একটি ভেরিয়েবলের প্রশিক্ষণ প্রয়োজন (সহজভাবে লিখুন, আপনি যে মানগুলি চান তার জন্য ভেরিয়েবলগুলি সেট করুন) স্বয়ংক্রিয়ভাবে টিএফ ব্যবহার করতে) to

কিছু আকর্ষণীয় মডেলগুলিতে, স্টাইল ট্রান্সফার মডেলের মতো , ইনপুট পিক্সগুলি অনুকূলিত হতে চলেছে এবং সাধারণত-নামক মডেল ভেরিয়েবলগুলি স্থির করা হয়, তারপরে আমাদের সেই লিঙ্কটিতে কার্যকর হিসাবে পরিবর্তন হিসাবে একটি ইনপুট (সাধারণত এলোমেলোভাবে শুরু করা উচিত) করা উচিত।

আরও তথ্যের জন্য দয়া করে এই সাধারণ এবং চিত্রিত ডকটি অনুমান করুন ।


38

টি এল; ডিআর

ভেরিয়েবল

  • পরামিতি শিখতে জন্য
  • মূল্যবোধ প্রশিক্ষণ থেকে প্রাপ্ত করা যেতে পারে
  • প্রাথমিক মানগুলি প্রয়োজনীয় (প্রায়শই এলোমেলো)

প্লেসহোল্ডার

  • ডেটার জন্য বরাদ্দকৃত স্টোরেজ (যেমন কোনও ফিডের সময় চিত্র পিক্সেল ডেটার জন্য)
  • প্রাথমিক মানগুলি প্রয়োজন হয় না (তবে সেট করা যায়, দেখুন tf.placeholder_with_default)

34

মধ্যে সবচেয়ে বড় পার্থক্য tf.Variable এবং tf.placeholder যে


আপনি পরামিতিগুলি ধরে রাখতে এবং আপডেট করার জন্য ভেরিয়েবলগুলি ব্যবহার করেন। চলক হ'ল মেনু-মেমরি বাফারগুলির মধ্যে টেনার রয়েছে। এগুলি অবশ্যই স্পষ্টভাবে শুরু করা উচিত এবং প্রশিক্ষণের সময় এবং পরে ডিস্কে সংরক্ষণ করা যেতে পারে। আপনি পরে মডেলটি অনুশীলন বা বিশ্লেষণ করতে সংরক্ষিত মানগুলি পুনরুদ্ধার করতে পারেন।

ভেরিয়েবলের সূচনা দিয়ে সম্পন্ন হয় sess.run(tf.global_variables_initializer())। একটি ভেরিয়েবল তৈরি করার সময়, আপনাকে একটি টেন্সরটির প্রাথমিক মূল্য হিসাবে Variable()কনস্ট্রাক্টরের কাছে দিতে হবে এবং যখন আপনি একটি ভেরিয়েবল তৈরি করেন আপনি সর্বদা এর আকারটি জানেন।


অন্যদিকে, আপনি স্থানধারক আপডেট করতে পারবেন না। সেগুলিও আরম্ভ করা উচিত নয়, তবে যেহেতু তারা একটি সেন্সর রাখার প্রতিশ্রুতি রয়েছে, তাই আপনাকে সেগুলিতে মূল্য দিতে হবে sess.run(<op>, {a: <some_val>})। এবং শেষ অবধি, একটি ভেরিয়েবলের সাথে তুলনা করে, স্থানধারকটি আকৃতিটি জানেন না। আপনি হয় মাত্রার অংশগুলি সরবরাহ করতে পারেন বা কিছুই সরবরাহ করতে পারেন না।


অন্যান্য পার্থক্য রয়েছে:

মজার অংশটি হ'ল কেবল স্থানধারীদেরই খাওয়ানো যায় না। আপনি মানটি একটি চলক এবং এমনকি একটি ধ্রুবককে দিতে পারেন।


14

অন্যের উত্তর যুক্ত করে, তারা টেনসোফ্লো ওয়েবসাইটে এই এমএনআইএসটি টিউটোরিয়ালে এটি খুব ভালভাবে ব্যাখ্যা করেছেন :

প্রতীকী ভেরিয়েবলগুলি ম্যানিপুলেট করে আমরা এই ইন্টারেক্টিভ অপারেশনগুলিকে বর্ণনা করি। আসুন এটি তৈরি করুন:

x = tf.placeholder(tf.float32, [None, 784]),

xএকটি নির্দিষ্ট মান নয়। এটি একটি স্থানধারক, একটি মান যা আমরা ইনপুট করব যখন আমরা টেনসরফ্লো কে একটি গণনা চালানোর জন্য বলি। আমরা এমএনআইএসটি চিত্রের যে কোনও সংখ্যক ইনপুট করতে সক্ষম হতে চাই, প্রতিটিতে একটি 784-মাত্রিক ভেক্টর সমতল। আমরা একে 2-ডি টেনসর হিসাবে ভাসমান-পয়েন্ট সংখ্যার আকারে [কোনও কিছুই নয়, 784] হিসাবে উপস্থাপন করি। (এখানে কোনোটার অর্থ হ'ল কোনও মাত্রা কোনও দৈর্ঘ্যের হতে পারে))

আমাদের মডেলের জন্য আমাদের ওজন এবং বায়াসও প্রয়োজন। আমরা অতিরিক্ত ইনপুট মত এই চিকিত্সা কল্পনা পারে, কিন্তু TensorFlow এটা নিয়ন্ত্রণে একটি আরও ভাল উপায় আছে: Variable। এ Variableহ'ল একটি সংশোধনযোগ্য টেনসর যা টেনসরফ্লো এর ইন্টারেক্টিভ ক্রিয়াকলাপগুলির গ্রাফে বাস করে। এটি গণনা দ্বারা ব্যবহার এবং এমনকি সংশোধন করা যেতে পারে। মেশিন লার্নিং অ্যাপ্লিকেশনগুলির জন্য, একটিতে সাধারণত মডেল প্যারামিটার থাকে Variable

W = tf.Variable(tf.zeros([784, 10]))

b = tf.Variable(tf.zeros([10]))

আমরা এই সৃষ্টি Variableদিয়ে গুলি tf.Variableপ্রাথমিক মান Variable: এই ক্ষেত্রে, আমরা আরম্ভ উভয় Wএবং bশূন্য পূর্ণ tensors হিসাবে। যেহেতু আমরা শিখতে যাচ্ছি Wএবং b, তারা প্রাথমিকভাবে কী তা খুব বেশি কিছু যায় আসে না।


হাই, আপনার উত্তরের জন্য ধন্যবাদ! আপনি যে উদাহরণটি দিয়েছেন xতাতে আমাদের আকার আছে [batch size, features], আমাদের ওজন ইনপুট থেকে আকারের প্রথম স্তরে [features, hidden units]এবং বায়াসগুলি রাখে [hidden units]। সুতরাং আমার প্রশ্ন: আমরা কীভাবে তাদের একসাথে গুণ করব? যদি আমরা এটি করি tf.matmul(x, w)তবে আমরা তা পেতে যাচ্ছি [batch size, hidden units]এবং আমরা এটি করতে পারব না b, যেহেতু এটির আকার রয়েছে[hidden units]
Euler_Salter

1
এম.গর্নার তার স্লাইডশোতে এই বিষয়গুলি ব্যাখ্যা করেছেন "পিএইচডি ছাড়াই টেনসরফ্লো এবং গভীর শিক্ষা শিখুন" " আমি এই মন্তব্য এখানে করতে পারে চেয়ে ভাল। : তাই, দয়া করে আমাকে এই স্লাইডটি পড়ুন করার অনুমতি দেয় docs.google.com/presentation/d/...
tagoma

11

প্রক্রিয়াটি সংরক্ষণ / সম্পাদন করতে টেনসরফ্লো তিন ধরণের পাত্রে ব্যবহার করে

  1. ধ্রুবক: ধ্রুবকগুলি সাধারণ তথ্য ধারণ করে।

  2. ভেরিয়েবলগুলি: কস্ট_ফানশনের মতো সম্পর্কিত ফাংশন সহ ডেটা মানগুলি পরিবর্তন করা হবে ..

  3. স্থানধারক: প্রশিক্ষণ / পরীক্ষার ডেটা গ্রাফটিতে পাঠানো হবে।


10

স্নিপেট উদাহরণ:

import numpy as np
import tensorflow as tf

### Model parameters ###
W = tf.Variable([.3], tf.float32)
b = tf.Variable([-.3], tf.float32)

### Model input and output ###
x = tf.placeholder(tf.float32)
linear_model = W * x + b
y = tf.placeholder(tf.float32)

### loss ###
loss = tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares

### optimizer ###
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)

### training data ###
x_train = [1,2,3,4]
y_train = [0,-1,-2,-3]

### training loop ###
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init) # reset values to wrong
for i in range(1000):
  sess.run(train, {x:x_train, y:y_train})

নাম হিসাবে স্থানধারক পরে একটি মান প্রদান করার প্রতিশ্রুতি বলে

পরিবর্তনশীল হ'ল প্রশিক্ষণ প্যারামিটারগুলি ( W(ম্যাট্রিক্স), b(পক্ষপাত) আপনার প্রতিদিনের প্রোগ্রামিংয়ের জন্য সাধারণ ভেরিয়েবলগুলির সমান, যা প্রশিক্ষক প্রতিটি রান / পদক্ষেপে আপডেট / পরিবর্তন করে।

যদিও স্থানধারকের কোনও প্রাথমিক মানের প্রয়োজন নেই, যখন আপনি তৈরি করেছেন xএবং yটিএফ কোনও মেমরি বরাদ্দ করেন না, এর পরিবর্তে আপনি যখন sess.run()ব্যবহারের স্থানধারীদের খাওয়ান তখন feed_dictটেনসরফ্লো তাদের জন্য উপযুক্ত আকারের মেমরি বরাদ্দ করবে ( xএবং y) - এই অসংরক্ষিত- নেস আমাদের যে কোনও আকার এবং ডেটা আকার দিতে পারে।


সংক্ষেপে :

পরিবর্তনশীল - প্রতিটি পদক্ষেপের পরে আপনি প্রশিক্ষক (অর্থাত্ গ্রেডিয়েন্টডেসেন্টঅপটিমাইজার) আপডেট করতে চান এমন একটি প্যারামিটার।

স্থানধারক ডেমো -

a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b  # + provides a shortcut for tf.add(a, b)

এক্সেকিউশন:

print(sess.run(adder_node, {a: 3, b:4.5}))
print(sess.run(adder_node, {a: [1,3], b: [2, 4]}))

ফলাফল আউটপুট

7.5
[ 3.  7.]

প্রথম ক্ষেত্রে 3 এবং 4.5 যথাক্রমে aএবং bযথাক্রমে পাস হবে এবং তারপরে অ্যাডার_নোড আউটপুটিং to. দ্বিতীয় ক্ষেত্রে একটি ফিড তালিকা রয়েছে, প্রথম পদক্ষেপ 1 এবং 2 যোগ করা হবে, পরের 3 এবং 4 ( aএবং b)।


প্রাসঙ্গিক পড়া:


7

ভেরিয়েবল

আপনার প্রোগ্রাম দ্বারা ভাগ করে নেওয়া, স্থির রাষ্ট্রের প্রতিনিধিত্ব করার সেরা একটি টেনসরফ্লো পরিবর্তনশীল। চলকগুলি tf. পরিবর্তনশীল শ্রেণীর মাধ্যমে হেরফের হয়। অভ্যন্তরীণভাবে, একটি tf. পরিবর্তনশীল একটি ধ্রুবক টেন্সর সঞ্চয় করে। নির্দিষ্ট ক্রিয়াকলাপগুলি আপনাকে এই সেন্সরটির মানগুলি পড়তে ও সংশোধন করার অনুমতি দেয়। এই পরিবর্তনগুলি একাধিক টিএফ.সেশনগুলিতে দৃশ্যমান, যাতে একাধিক কর্মীরা একটি টিএফ.ভেরিয়েবলের জন্য একই মান দেখতে পারে। ভেরিয়েবলগুলি ব্যবহারের আগে শুরু করতে হবে।

উদাহরণ:

x = tf.Variable(3, name="x")
y = tf.Variable(4, name="y")
f = x*x*y + y + 2

এটি একটি গণনার গ্রাফ তৈরি করে। ভেরিয়েবলগুলি (x এবং y) আরম্ভ করা যেতে পারে এবং ফাংশন (চ) একটি টেনসরফ্লো অধিবেশনে নিম্নলিখিত হিসাবে মূল্যায়ন করা হয়:

with tf.Session() as sess:
     x.initializer.run()
     y.initializer.run()
     result = f.eval()
print(result)
42

প্লেসহোল্ডার

স্থানধারক হ'ল একটি নোড (ভেরিয়েবলের সমান) যার মান ভবিষ্যতে আরম্ভ করা যেতে পারে। এই নোডগুলি মূলত রানটাইমের সময় তাদের নির্ধারিত মানকে আউটপুট দেয়। একটি স্থানধারক নোড টিফ.প্লেসহোল্ডার () শ্রেণীর সাহায্যে বরাদ্দ করা যেতে পারে যেখানে আপনি আর্গুমেন্ট যেমন ভেরিয়েবল এবং / অথবা এর আকারের ধরণ সরবরাহ করতে পারেন। প্রশিক্ষক ডেটাसेट পরিবর্তন করতে থাকায় স্থানধারকরা মেশিন লার্নিং মডেলটিতে প্রশিক্ষণ ডেটাসেট উপস্থাপনের জন্য ব্যাপকভাবে ব্যবহৃত হয়।

উদাহরণ:

A = tf.placeholder(tf.float32, shape=(None, 3))
B = A + 5

দ্রষ্টব্য: মাত্রার জন্য 'কিছুই নয়' অর্থ 'কোনও আকার'।

with tf.Session as sess:
    B_val_1 = B.eval(feed_dict={A: [[1, 2, 3]]})
    B_val_2 = B.eval(feed_dict={A: [[4, 5, 6], [7, 8, 9]]})

print(B_val_1)
[[6. 7. 8.]]
print(B_val_2)
[[9. 10. 11.]
 [12. 13. 14.]]

তথ্যসূত্র:

  1. https://www.tensorflow.org/guide/variables
  2. https://www.tensorflow.org/api_docs/python/tf/placeholder
  3. ও'রেলি: হ্যান্ডস অন মেশিন লার্নিং সায়কিট-লার্ন এবং টেনসরফ্লো

6

চিন্তা করুন Variableযা আমরা ভাষায় প্রোগ্রামিং ব্যবহার একটি স্বাভাবিক ভেরিয়েবল যেমন tensorflow হবে। আমরা ভেরিয়েবলগুলি সূচনা করি, আমরা পরে এটিও সংশোধন করতে পারি। যদিও placeholderপ্রাথমিক মানের প্রয়োজন হয় না। স্থানধারক কেবল ভবিষ্যতের ব্যবহারের জন্য মেমরির ব্লক বরাদ্দ করে। পরে, আমরা feed_dictএতে ডেটা ফিড করতে ব্যবহার করতে পারি placeholder। ডিফল্টরূপে, placeholderএকটি অবিচ্ছিন্ন আকার রয়েছে, যা আপনাকে একটি সেশনে বিভিন্ন আকারের টেনারগুলি খাওয়ানোর অনুমতি দেয়। আমি নীচের মতো করে .চ্ছিক আর্গুমেন্ট-আকার দিয়ে পাস করে আপনি বাধা আকার তৈরি করতে পারেন।

x = tf.placeholder(tf.float32,(3,4))
y =  x + 2

sess = tf.Session()
print(sess.run(y)) # will cause an error

s = np.random.rand(3,4)
print(sess.run(y, feed_dict={x:s}))

মেশিন লার্নিংয়ের কাজটি করার সময়, বেশিরভাগ সময় আমরা সারিগুলির সংখ্যা সম্পর্কে অজানা থাকি তবে (ধরে নেওয়া যাক) আমরা বৈশিষ্ট্য বা কলামগুলির সংখ্যা জানি না। সেক্ষেত্রে আমরা কিছুই ব্যবহার করতে পারি না।

x = tf.placeholder(tf.float32, shape=(None,4))

এখন, রান সময়ে আমরা 4 টি কলাম এবং যে কোনও সংখ্যক সারি দিয়ে ম্যাট্রিক্স খাওয়াতে পারি।

এছাড়াও, স্থানধারকরা ইনপুট ডেটার জন্য ব্যবহার করা হয় (তারা আমাদের ধরণের মডেলগুলিকে খাওয়ানোর জন্য ব্যবহার করে এমন ধরনের ভেরিয়েবল), যেখানে ভেরিয়েবলগুলি সময়ের সাথে সাথে ট্রেনের ওজনগুলির মতো পরামিতি।


4

স্থানধারক:

  1. একটি স্থানধারক কেবল একটি পরিবর্তনশীল যা আমরা পরবর্তী তারিখে ডেটা বরাদ্দ করব। এটি আমাদের অপারেশন তৈরি করতে এবং ডেটা প্রয়োজন ছাড়াই আমাদের গণনা গ্রাফ তৈরি করতে সহায়তা করে। টেনসরফ্লো পরিভাষায় আমরা এর পরে এই স্থানধারকগুলির মাধ্যমে গ্রাফে ডেটা ফিড করি।

  2. প্রাথমিক মানগুলির প্রয়োজন হয় না তবে এর সাথে ডিফল্ট মান থাকতে পারে tf.placeholder_with_default)

  3. আমাদের রানটাইমের সময় এর মতো মূল্য প্রদান করতে হবে:

    a = tf.placeholder(tf.int16) // initialize placeholder value
    b = tf.placeholder(tf.int16) // initialize placeholder value
    
    use it using session like :
    
    sess.run(add, feed_dict={a: 2, b: 3}) // this value we have to assign at runtime

পরিবর্তনশীল:

  1. আপনার প্রোগ্রাম দ্বারা ভাগ করে নেওয়া, স্থির রাষ্ট্রের প্রতিনিধিত্ব করার সেরা একটি টেনসরফ্লো পরিবর্তনশীল।
  2. চলকগুলি tf. পরিবর্তনশীল শ্রেণীর মাধ্যমে হেরফের হয়। একটি টিএফ.ভেরিয়েবল এমন একটি টেনসরকে উপস্থাপন করে যার মান এটির উপর চাপিয়ে পরিবর্তন করা যেতে পারে।

উদাহরণ: tf.Variable("Welcome to tensorflow!!!")


3

টেনসরফ্লো ২.০ সামঞ্জস্যপূর্ণ উত্তর : ডিফল্ট এক্সিকিউশন মোড ইজার এক্সিকিউশন হওয়ায় স্থানধারকদের ধারণাটি ডিফল্টরূপে tf.placeholderউপলব্ধ হবে না Tensorflow 2.x (>= 2.0)

তবে, Graph Mode( Disable Eager Execution) এ ব্যবহৃত হলে আমরা সেগুলি ব্যবহার করতে পারি ।

সংস্করণ 2.x এ টিএফ প্লেসোল্ডারের জন্য সমান কমান্ড tf.compat.v1.placeholder

ভার্সন ২.x এর টিএফ ভেরিয়েবলের জন্য সমান কমান্ড হ'ল tf.Variableএবং আপনি কোডটি ১.x থেকে ২.x এ স্থানান্তর করতে চান, সমমানের কমান্ডটি হ'ল

tf.compat.v2.Variable

টেনসরফ্লো সংস্করণ 2.0 সম্পর্কে আরও তথ্যের জন্য দয়া করে এই টেনসরফ্লু পৃষ্ঠাটি দেখুন।

সংস্করণ 1.x থেকে 2.x এ স্থানান্তর সম্পর্কে আরও তথ্যের জন্য দয়া করে মাইগ্রেশন গাইডটি দেখুন।


2

একটি গণনা গ্রাফ চিন্তা করুন । এই জাতীয় গ্রাফে, গ্রাফে আমাদের ডেটা প্রেরণের জন্য আমাদের একটি ইনপুট নোড দরকার, সেই নোডগুলি টেনসরফ্লোতে স্থানধারক হিসাবে সংজ্ঞায়িত করা উচিত ।

পাইথনে সাধারণ প্রোগ্রাম হিসাবে ভাবেন না। আপনি একটি পাইথন প্রোগ্রাম লিখতে পারেন এবং এই সমস্ত জিনিসগুলি যা লোকেরা অন্য উত্তরে কেবল ভেরিয়েবলগুলির দ্বারা ব্যাখ্যা করেছিল, কিন্তু টেনসরফ্লোতে গণনা গ্রাফের জন্য, আপনার ডেটা গ্রাফে ফিড করার জন্য আপনাকে সেই নোডগুলি স্থানধারক হিসাবে সংজ্ঞায়িত করতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.