আপনার টেনসরফ্লো 1 কোডটি টেনসরফ্লো 2 তে স্থানান্তর করুন

টেনসরফ্লো.আর.জে দেখুন গুগল কোলাবে চালান গিটহাবের উত্স দেখুন নোটবুক ডাউনলোড করুন

এই গাইডটি নিম্ন-স্তরের টেনসরফ্লো এপিআই এর ব্যবহারকারীদের জন্য। আপনি উচ্চ পর্যায়ের API গুলি (ব্যবহার করে থাকেন tf.keras ) সেখানে কোনো পদক্ষেপ আপনি নিতে প্রয়োজন আপনার কোড সম্পূর্ণরূপে TensorFlow 2.x সামঞ্জস্যপূর্ণ করতে সামান্য হতে পারে অথবা:

এটা এখনও 1.x কোড চালানোর জন্য সম্ভব, অপরিবর্তিত ( contrib ছাড়া ), TensorFlow 2.x মধ্যে:

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

যাইহোক, এটি আপনাকে টেনসরফ্লো ২.x-এ তৈরি অনেক উন্নতির সুবিধা নিতে দেয় না। এই গাইডটি আপনাকে আপনার কোড আপগ্রেড করতে সহায়তা করবে, এটিকে আরও সহজ, আরও পারফরম্যান্ট এবং বজায় রাখা সহজ।

স্বয়ংক্রিয় রূপান্তর স্ক্রিপ্ট

প্রথম পদক্ষেপ, পরিবর্তন এই নির্দেশিকায় বর্ণিত বাস্তবায়ন চেষ্টা করার আগে, দৌড়ানো চেষ্টা হল আপগ্রেড স্ক্রিপ্ট

এটি আপনার কোডটিকে টেনসরফ্লো ২.x এ আপগ্রেড করার সময় একটি প্রাথমিক পাস কার্যকর করবে তবে এটি আপনার কোডটিকে ভি 2-তে পরিণত করতে পারে না। আপনার কোড এখনও ব্যবহার করতে পারে tf.compat.v1 এক্সেস প্লেসহোল্ডার, সেশন, সংগ্রহ, এবং অন্যান্য 1.x ধাঁচের কার্যকারিতা এন্ড পয়েন্ট।

শীর্ষ স্তরের আচরণগত পরিবর্তন

তাহলে TensorFlow আপনার কোড কাজ ব্যবহার করার 2.x tf.compat.v1.disable_v2_behavior , এখনও বিশ্বব্যাপী আচরণগত পরিবর্তন ঠিকানায় প্রয়োজন হতে পারে আছে। প্রধান পরিবর্তনগুলি হ'ল:

  • উৎসুক ফাঁসি, v1.enable_eager_execution() : যে পরোক্ষভাবে ব্যবহার একটি কোন কোড tf.Graph ব্যর্থ হবে। একটি এই কোড মোড়ানো করতে ভুলবেন না with tf.Graph().as_default() প্রসঙ্গ।

  • রিসোর্স ভেরিয়েবল, v1.enable_resource_variables() : কিছু কোড may অ নির্ণায়ক আচরণে উপর নির্ভর করে TensorFlow রেফারেন্স ভেরিয়েবল দ্বারা সক্ষম করা হয়েছে। রিসোর্স ভেরিয়েবলগুলি লিখিত থাকাকালীন লক হয়ে গেছে এবং তাই আরও স্বজ্ঞাত সামঞ্জস্যতার গ্যারান্টি সরবরাহ করে।

    • এটি প্রান্তের ক্ষেত্রে আচরণ পরিবর্তন করতে পারে।
    • এটি অতিরিক্ত কপি তৈরি করতে পারে এবং মেমরির উচ্চতর ব্যবহার করতে পারে।
    • এই ক্ষণস্থায়ী দ্বারা অক্ষম করা যেতে পারে use_resource=False থেকে tf.Variable কন্সট্রাকটর।
  • টেন্সর আকৃতি, v1.enable_v2_tensorshape() : TensorFlow 2.x সরলীকৃত টেন্সর আকার আচরণ। বদলে t.shape[0].value আপনি বলতে পারেন t.shape[0] । এই পরিবর্তনগুলি ছোট হওয়া উচিত এবং এখুনি এগুলি ঠিক করা বুদ্ধিমানের কাজ। পড়ুন TensorShape উদাহরণের জন্য অধ্যায়।

  • কন্ট্রোল প্রবাহ, v1.enable_control_flow_v2() : TensorFlow 2.x নিয়ন্ত্রণ প্রবাহ বাস্তবায়ন সরলীকৃত করা হয়েছে, এবং তাই বিভিন্ন গ্রাফ উপস্থাপনা উৎপন্ন হয়। দয়া করে ফাইল বাগ কোনো সমস্যা জন্য।

টেনসরফ্লো ২.x এর জন্য কোড তৈরি করুন

এই গাইড টেনসরফ্লো 1.x কোডটিকে টেনসরফ্লো 2.x তে রূপান্তর করার বেশ কয়েকটি উদাহরণ দিয়ে যাবে এই পরিবর্তনগুলি আপনার কোডটিকে পারফরম্যান্স অপটিমাইজেশন এবং সরলিকৃত API কলগুলির সুবিধা নিতে দেবে।

প্রতিটি ক্ষেত্রে, প্যাটার্নটি হ'ল:

1. প্রতিস্থাপন v1.Session.run কল

প্রতিটি v1.Session.run কলের জন্য একটি পাইথন ফাংশন দ্বারা প্রতিস্থাপিত হবে।

  • feed_dict এবং v1.placeholder গুলি ফাংশন আর্গুমেন্ট হয়ে।
  • fetches ফাংশনের ফেরানো মানটি হয়ে।
  • রূপান্তর সময় উৎসুক সঞ্চালনের মত মান পাইথন সরঞ্জামগুলির সাথে সহজ ডিবাগিং পারবেন pdb

এর পর, একটি যোগ tf.function এটা গ্রাফে দক্ষতার চালানোর জন্য প্রসাধক। পরীক্ষা করে দেখুন অটোগ্রাফ নির্দেশিকা কিভাবে এই কাজ করে আরো তথ্যের জন্য।

মনে রাখবেন যে:

  • ভিন্ন v1.Session.run , একটি tf.function একটি নির্দিষ্ট রিটার্ন স্বাক্ষর এবং সবসময় সব আউটপুট প্রদান করে। যদি এটি কার্য সম্পাদনের সমস্যা সৃষ্টি করে তবে দুটি পৃথক ফাংশন তৈরি করুন।

  • একটি জন্য কোন প্রয়োজন নেই tf.control_dependencies উত্তর: বা অনুরূপ অপারেশন tf.function যেমন যদি এটা লিখিত আদেশ মধ্যে চালানো হয়েছে আচরণ করে। tf.Variable বরাদ্দকরণ এবং tf.assert গুলি, উদাহরণস্বরূপ, স্বয়ংক্রিয়ভাবে মৃত্যুদন্ড কার্যকর করা হয়।

রূপান্তর মডেল অধ্যায় এই রূপান্তর প্রক্রিয়ার একটি কাজ উদাহরণস্বরূপ ধারণ করে।

২ ভেরিয়েবল এবং ক্ষতির উপরে নজর রাখার জন্য পাইথন অবজেক্ট ব্যবহার করুন

সমস্ত নাম-ভিত্তিক ভেরিয়েবল ট্র্যাকিং টেনসরফ্লো ২.x তে দৃ strongly়ভাবে নিরুৎসাহিত করা হয়েছে। ভেরিয়েবলগুলি ট্র্যাক করতে পাইথন অবজেক্ট ব্যবহার করুন।

ব্যবহারের tf.Variable পরিবর্তে v1.get_variable

প্রতিটি v1.variable_scope একটি পাইথন বস্তুর রূপান্তরিত করতে হবে। সাধারণত এটির মধ্যে একটি হবে:

আপনি ভেরিয়েবল সমষ্টিগত তালিকা করার প্রয়োজন হলে (যেমন tf.Graph.get_collection(tf.GraphKeys.VARIABLES) ), ব্যবহার .variables এবং .trainable_variables গুণাবলীর Layer এবং Model অবজেক্ট।

এই Layer এবং Model শ্রেণীর বেশ কিছু বৈশিষ্ট্য যে বিশ্বব্যাপী সংগ্রহের জন্য প্রয়োজন অপসারণ বাস্তবায়ন। তাদের .losses সম্পত্তি ব্যবহার করার জন্য একটি প্রতিস্থাপন হতে পারে tf.GraphKeys.LOSSES সংগ্রহ।

পড়ুন Keras নির্দেশিকা আরো বিস্তারিত জানার জন্য।

৩. আপনার প্রশিক্ষণের লুপগুলি আপগ্রেড করুন

আপনার ব্যবহারের ক্ষেত্রে কাজ করে এমন সর্বোচ্চ-স্তরের API ব্যবহার করুন। পছন্দ tf.keras.Model.fit আপনার নিজের প্রশিক্ষণ লুপ নির্মাণের করে।

এই উচ্চ স্তরের ফাংশনগুলি নিম্ন-স্তরের বিশদগুলি পরিচালনা করে যা আপনি নিজের প্রশিক্ষণ লুপটি লিখলে সহজেই মিস করা যায়। উদাহরণস্বরূপ, তারা স্বয়ংক্রিয়ভাবে সংগ্রহ নিয়মিতকরণ লোকসান, এবং সেট training=True যুক্তি যখন মডেল কলিং।

৪. আপনার ডেটা ইনপুট পাইপলাইনগুলি আপগ্রেড করুন

ব্যবহার করুন tf.data তথ্য ইনপুট জন্য ডেটাসেট। এই বস্তুগুলি দক্ষ, ভাবপ্রবণ এবং টেনসরফ্লোতে ভাল সংহত করে।

তারা সরাসরি প্রেরণ করা সম্ভব tf.keras.Model.fit পদ্ধতি।

model.fit(dataset, epochs=5)

এগুলি সরাসরি স্ট্যান্ডার্ড পাইথন দিয়ে পুনরাবৃত্তি করা যেতে পারে:

for example_batch, label_batch in dataset:
    break

5. বন্ধ রোমিং মাইগ্রেট করার প্যাকেজ compat.v1 প্রতীক

tf.compat.v1 মডিউল তার মূল শব্দার্থবিদ্যা সঙ্গে, সম্পূর্ণ TensorFlow 1.x এপিআই ধারণ করে।

TensorFlow 2.x আপগ্রেড স্ক্রিপ্ট , তাদের v2 সমতুল প্রতীক রূপান্তর করবে যদি এই ধরনের একটি রূপান্তর নিরাপদ অর্থাত যদি এটা নির্ধারণ করতে পারে TensorFlow 2.x সংস্করণের আচরণ ঠিক সমতূল্য (উদাহরণস্বরূপ, এটা নামান্তর হবে v1.arg_max থেকে tf.argmax , যারা যেহেতু একই ফাংশন) হয়।

পরে আপগ্রেড স্ক্রিপ্ট কোডের একটি টুকরা সঙ্গে সম্পন্ন করা হয়, এটা সম্ভবত অনেক উল্লেখ আছে compat.v1 । কোডের মধ্য দিয়ে যাওয়া এবং এগুলি ম্যানুয়ালি ভি 2 সমতুল্যে রূপান্তর করা মূল্যবান (এটি যদি লগের মধ্যে থাকে তবে তা উল্লেখ করা উচিত)।

রূপান্তরকারী মডেল

নিম্ন-স্তরের ভেরিয়েবল এবং অপারেটর কার্যকর করা

নিম্ন-স্তরের API ব্যবহারের উদাহরণগুলির মধ্যে রয়েছে:

  • পুনরায় ব্যবহার নিয়ন্ত্রণ করতে ভেরিয়েবল স্কোপগুলি ব্যবহার করা।
  • সঙ্গে ভেরিয়েবল তৈরি করা হচ্ছে v1.get_variable
  • সুস্পষ্টভাবে সংগ্রহগুলি অ্যাক্সেস করা।
  • সংগ্রহগুলির মধ্যে স্পষ্টভাবে পদ্ধতির মাধ্যমে অ্যাক্সেস করা:

  • ব্যবহার v1.placeholder গ্রাফ ইনপুট সেট আপ করার জন্য।

  • সঙ্গে গ্রাফ নির্বাহ Session.run

  • ম্যানুয়ালি ভেরিয়েবল শুরু করা।

রূপান্তর করার আগে

টেনসরফ্লো 1.x ব্যবহার করে কোডগুলিতে এই নিদর্শনগুলি দেখতে কেমন তা এখানে is

import tensorflow as tf
import tensorflow.compat.v1 as v1

import tensorflow_datasets as tfds
2021-07-19 23:37:03.701382: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0
g = v1.Graph()

with g.as_default():
  in_a = v1.placeholder(dtype=v1.float32, shape=(2))
  in_b = v1.placeholder(dtype=v1.float32, shape=(2))

  def forward(x):
    with v1.variable_scope("matmul", reuse=v1.AUTO_REUSE):
      W = v1.get_variable("W", initializer=v1.ones(shape=(2,2)),
                          regularizer=lambda x:tf.reduce_mean(x**2))
      b = v1.get_variable("b", initializer=v1.zeros(shape=(2)))
      return W * x + b

  out_a = forward(in_a)
  out_b = forward(in_b)
  reg_loss=v1.losses.get_regularization_loss(scope="matmul")

with v1.Session(graph=g) as sess:
  sess.run(v1.global_variables_initializer())
  outs = sess.run([out_a, out_b, reg_loss],
                feed_dict={in_a: [1, 0], in_b: [0, 1]})

print(outs[0])
print()
print(outs[1])
print()
print(outs[2])
2021-07-19 23:37:05.720243: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcuda.so.1
2021-07-19 23:37:06.406838: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:06.407495: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties: 
pciBusID: 0000:00:05.0 name: NVIDIA Tesla V100-SXM2-16GB computeCapability: 7.0
coreClock: 1.53GHz coreCount: 80 deviceMemorySize: 15.78GiB deviceMemoryBandwidth: 836.37GiB/s
2021-07-19 23:37:06.407533: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0
2021-07-19 23:37:06.410971: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcublas.so.11
2021-07-19 23:37:06.411090: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcublasLt.so.11
2021-07-19 23:37:06.412239: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcufft.so.10
2021-07-19 23:37:06.412612: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcurand.so.10
2021-07-19 23:37:06.413657: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcusolver.so.11
2021-07-19 23:37:06.414637: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcusparse.so.11
2021-07-19 23:37:06.414862: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudnn.so.8
2021-07-19 23:37:06.415002: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:06.415823: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:06.416461: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0
2021-07-19 23:37:06.417159: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 AVX512F FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2021-07-19 23:37:06.417858: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:06.418588: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties: 
pciBusID: 0000:00:05.0 name: NVIDIA Tesla V100-SXM2-16GB computeCapability: 7.0
coreClock: 1.53GHz coreCount: 80 deviceMemorySize: 15.78GiB deviceMemoryBandwidth: 836.37GiB/s
2021-07-19 23:37:06.418704: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:06.419416: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:06.420021: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0
2021-07-19 23:37:06.420085: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0
2021-07-19 23:37:07.053897: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1258] Device interconnect StreamExecutor with strength 1 edge matrix:
2021-07-19 23:37:07.053954: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1264]      0 
2021-07-19 23:37:07.053964: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1277] 0:   N 
2021-07-19 23:37:07.054212: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:07.054962: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:07.055685: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:07.056348: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1418] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 14646 MB memory) -> physical GPU (device: 0, name: NVIDIA Tesla V100-SXM2-16GB, pci bus id: 0000:00:05.0, compute capability: 7.0)
2021-07-19 23:37:07.060371: I tensorflow/core/platform/profile_utils/cpu_utils.cc:114] CPU Frequency: 2000165000 Hz
[[1. 0.]
 [1. 0.]]

[[0. 1.]
 [0. 1.]]

1.0

রূপান্তর করার পরে

রূপান্তরিত কোডে:

  • ভেরিয়েবলগুলি স্থানীয় পাইথন অবজেক্ট।
  • forward ফাংশন এখনও হিসাব সংজ্ঞায়িত করে।
  • Session.run কল কল দিয়ে প্রতিস্থাপিত হয় forward
  • ঐচ্ছিক tf.function প্রসাধক পারফরম্যান্সের জন্য যোগ করা যাবে।
  • নিয়মিতকরণগুলি কোনও বিশ্বব্যাপী সংগ্রহের উল্লেখ না করে ম্যানুয়ালি গণনা করা হয়।
  • এমন কোনও সেশন বা প্লেসহোল্ডার কোন ব্যবহার নেই।
W = tf.Variable(tf.ones(shape=(2,2)), name="W")
b = tf.Variable(tf.zeros(shape=(2)), name="b")

@tf.function
def forward(x):
  return W * x + b

out_a = forward([1,0])
print(out_a)
tf.Tensor(
[[1. 0.]
 [1. 0.]], shape=(2, 2), dtype=float32)
2021-07-19 23:37:07.370160: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:07.370572: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties: 
pciBusID: 0000:00:05.0 name: NVIDIA Tesla V100-SXM2-16GB computeCapability: 7.0
coreClock: 1.53GHz coreCount: 80 deviceMemorySize: 15.78GiB deviceMemoryBandwidth: 836.37GiB/s
2021-07-19 23:37:07.370699: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:07.371011: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:07.371278: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0
2021-07-19 23:37:07.371360: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1258] Device interconnect StreamExecutor with strength 1 edge matrix:
2021-07-19 23:37:07.371370: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1264]      0 
2021-07-19 23:37:07.371377: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1277] 0:   N 
2021-07-19 23:37:07.371511: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:07.371844: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:07.372131: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1418] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 14646 MB memory) -> physical GPU (device: 0, name: NVIDIA Tesla V100-SXM2-16GB, pci bus id: 0000:00:05.0, compute capability: 7.0)
2021-07-19 23:37:07.419147: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:176] None of the MLIR Optimization Passes are enabled (registered 2)
out_b = forward([0,1])

regularizer = tf.keras.regularizers.l2(0.04)
reg_loss=regularizer(W)

উপর ভিত্তি করে মডেল tf.layers

v1.layers মডিউল স্তর-ফাংশন যে ওপরেই নির্ভরশীল থাকতে করতে ব্যবহৃত হয় v1.variable_scope সংজ্ঞায়িত করতে এবং পুনরায় ব্যবহার করার ভেরিয়েবল।

রূপান্তর করার আগে

def model(x, training, scope='model'):
  with v1.variable_scope(scope, reuse=v1.AUTO_REUSE):
    x = v1.layers.conv2d(x, 32, 3, activation=v1.nn.relu,
          kernel_regularizer=lambda x:0.004*tf.reduce_mean(x**2))
    x = v1.layers.max_pooling2d(x, (2, 2), 1)
    x = v1.layers.flatten(x)
    x = v1.layers.dropout(x, 0.1, training=training)
    x = v1.layers.dense(x, 64, activation=v1.nn.relu)
    x = v1.layers.batch_normalization(x, training=training)
    x = v1.layers.dense(x, 10)
    return x
train_data = tf.ones(shape=(1, 28, 28, 1))
test_data = tf.ones(shape=(1, 28, 28, 1))

train_out = model(train_data, training=True)
test_out = model(test_data, training=False)

print(train_out)
print()
print(test_out)
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/keras/legacy_tf_layers/convolutional.py:414: UserWarning: `tf.layers.conv2d` is deprecated and will be removed in a future version. Please Use `tf.keras.layers.Conv2D` instead.
  warnings.warn('`tf.layers.conv2d` is deprecated and '
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py:2183: UserWarning: `layer.apply` is deprecated and will be removed in a future version. Please use `layer.__call__` method instead.
  warnings.warn('`layer.apply` is deprecated and '
2021-07-19 23:37:07.471106: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudnn.so.8
2021-07-19 23:37:09.562531: I tensorflow/stream_executor/cuda/cuda_dnn.cc:359] Loaded cuDNN version 8100
2021-07-19 23:37:14.794726: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcublas.so.11
tf.Tensor([[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]], shape=(1, 10), dtype=float32)

tf.Tensor(
[[ 0.04853132 -0.08974641 -0.32679698  0.07017353  0.12982666 -0.2153313
  -0.09793851  0.10957378  0.01823931  0.00898573]], shape=(1, 10), dtype=float32)
2021-07-19 23:37:15.173234: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcublasLt.so.11
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/keras/legacy_tf_layers/pooling.py:310: UserWarning: `tf.layers.max_pooling2d` is deprecated and will be removed in a future version. Please use `tf.keras.layers.MaxPooling2D` instead.
  warnings.warn('`tf.layers.max_pooling2d` is deprecated and '
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/keras/legacy_tf_layers/core.py:329: UserWarning: `tf.layers.flatten` is deprecated and will be removed in a future version. Please use `tf.keras.layers.Flatten` instead.
  warnings.warn('`tf.layers.flatten` is deprecated and '
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/keras/legacy_tf_layers/core.py:268: UserWarning: `tf.layers.dropout` is deprecated and will be removed in a future version. Please use `tf.keras.layers.Dropout` instead.
  warnings.warn('`tf.layers.dropout` is deprecated and '
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/keras/legacy_tf_layers/core.py:171: UserWarning: `tf.layers.dense` is deprecated and will be removed in a future version. Please use `tf.keras.layers.Dense` instead.
  warnings.warn('`tf.layers.dense` is deprecated and '
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/keras/legacy_tf_layers/normalization.py:308: UserWarning: `tf.layers.batch_normalization` is deprecated and will be removed in a future version. Please use `tf.keras.layers.BatchNormalization` instead. In particular, `tf.control_dependencies(tf.GraphKeys.UPDATE_OPS)` should not be used (consult the `tf.keras.layers.BatchNormalization` documentation).
  '`tf.layers.batch_normalization` is deprecated and '

রূপান্তর করার পরে

বেশিরভাগ যুক্তি একই ছিল। তবে পার্থক্য লক্ষ্য করুন:

  • training যুক্তি মডেল করে প্রতিটি স্তরের পাস যখন এটি চালনা করে।
  • আসল প্রথম আর্গুমেন্ট model ফাংশন (ইনপুট x ) সর্বস্বান্ত হয়। এর কারণ অবজেক্ট স্তরগুলি মডেলটিকে কল করতে মডেলটিকে আলাদা করে দেয়।

আরও মনে রাখবেন:

  • আপনার কাছ থেকে regularizers বা initializers ব্যবহার করে থাকেন tf.contrib , এই অন্যদের তুলনায় বেশি যুক্তি পরিবর্তন আছে।
  • কোডটির আর, সংগ্রহের লিখেছেন তাই মতো কাজগুলির v1.losses.get_regularization_loss আর এই মান ফিরে আসবো, যা সম্ভবত আপনার প্রশিক্ষণ লুপ ভঙ্গ।
model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, 3, activation='relu',
                           kernel_regularizer=tf.keras.regularizers.l2(0.04),
                           input_shape=(28, 28, 1)),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dropout(0.1),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Dense(10)
])

train_data = tf.ones(shape=(1, 28, 28, 1))
test_data = tf.ones(shape=(1, 28, 28, 1))
train_out = model(train_data, training=True)
print(train_out)
tf.Tensor([[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]], shape=(1, 10), dtype=float32)
test_out = model(test_data, training=False)
print(test_out)
tf.Tensor(
[[-0.06252427  0.30122417 -0.18610534 -0.04890637 -0.01496555  0.41607457
   0.24905115  0.014429   -0.12719882 -0.22354674]], shape=(1, 10), dtype=float32)
# Here are all the trainable variables
len(model.trainable_variables)
8
# Here is the regularization loss
model.losses
[<tf.Tensor: shape=(), dtype=float32, numpy=0.07443664>]

মিশ্র ভেরিয়েবল & v1.layers

বর্তমান কোড প্রায়ই দ্রবণ নিম্ন-স্তরের TensorFlow 1.x ভেরিয়েবল এবং উচ্চতর পর্যায়ের সঙ্গে অপারেশন v1.layers

রূপান্তর করার আগে

def model(x, training, scope='model'):
  with v1.variable_scope(scope, reuse=v1.AUTO_REUSE):
    W = v1.get_variable(
      "W", dtype=v1.float32,
      initializer=v1.ones(shape=x.shape),
      regularizer=lambda x:0.004*tf.reduce_mean(x**2),
      trainable=True)
    if training:
      x = x + W
    else:
      x = x + W * 0.5
    x = v1.layers.conv2d(x, 32, 3, activation=tf.nn.relu)
    x = v1.layers.max_pooling2d(x, (2, 2), 1)
    x = v1.layers.flatten(x)
    return x

train_out = model(train_data, training=True)
test_out = model(test_data, training=False)

রূপান্তর করার পরে

এই কোডটি রূপান্তর করতে, পূর্ববর্তী উদাহরণের মতো স্তরগুলিকে স্তরগুলিতে ম্যাপিংয়ের ধরণটি অনুসরণ করুন।

সাধারণ প্যাটার্নটি হ'ল:

  • মধ্যে সংগ্রহ স্তর পরামিতি __init__
  • ভেরিয়েবল তৈরি করুন build
  • গণনার সম্পাদন call , এবং এর ফলে ফিরে যান।

v1.variable_scope মূলত তার নিজস্ব একটি লেয়ার। সুতরাং একটি যেমন পুনর্লিখন tf.keras.layers.Layer । পরীক্ষা করে দেখুন নির্দেশিকা subclassing মাধ্যমে নতুন স্তর ও মডেল তৈরীর বিস্তারিত জানার জন্য।

# Create a custom layer for part of the model
class CustomLayer(tf.keras.layers.Layer):
  def __init__(self, *args, **kwargs):
    super(CustomLayer, self).__init__(*args, **kwargs)

  def build(self, input_shape):
    self.w = self.add_weight(
        shape=input_shape[1:],
        dtype=tf.float32,
        initializer=tf.keras.initializers.ones(),
        regularizer=tf.keras.regularizers.l2(0.02),
        trainable=True)

  # Call method will sometimes get used in graph mode,
  # training will get turned into a tensor
  @tf.function
  def call(self, inputs, training=None):
    if training:
      return inputs + self.w
    else:
      return inputs + self.w * 0.5
custom_layer = CustomLayer()
print(custom_layer([1]).numpy())
print(custom_layer([1], training=True).numpy())
[1.5]
[2.]
train_data = tf.ones(shape=(1, 28, 28, 1))
test_data = tf.ones(shape=(1, 28, 28, 1))

# Build the model including the custom layer
model = tf.keras.Sequential([
    CustomLayer(input_shape=(28, 28, 1)),
    tf.keras.layers.Conv2D(32, 3, activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Flatten(),
])

train_out = model(train_data, training=True)
test_out = model(test_data, training=False)

কিছু বিষয় লক্ষণীয়:

  • সাবক্ল্যাসড কেরাস মডেল এবং স্তরগুলির উভয় ভি 1 গ্রাফে (স্বয়ংক্রিয় নিয়ন্ত্রণের নির্ভরতা নেই) এবং আগ্রহী মোডে চালানো দরকার:

    • মোড়ানো call একটি tf.function অটোগ্রাফ এবং স্বয়ংক্রিয় নিয়ন্ত্রণ নির্ভরতা জন্য।
  • একটি গ্রহণ করতে ভুলবেন না training আর্গুমেন্ট প্রাপ্ত করতে call :

    • কখনও কখনও এটি একটি হল tf.Tensor
    • কখনও কখনও এটি পাইথন বুলিয়ান
  • কন্সট্রাকটর বা মডেল ভেরিয়েবল তৈরি করুন Model.build self.add_weight ব্যবহার `:

    • ইন Model.build আপনি ইনপুট আকৃতি এক্সেস আছে, তাই ম্যাচিং আকৃতি সঙ্গে ওজন তৈরি করতে পারেন
    • ব্যবহার tf.keras.layers.Layer.add_weight ট্র্যাক ভেরিয়েবল এবং নিয়মিতকরণ ক্ষতির Keras পারবেন
  • রাখবেন না tf.Tensors আপনার বস্তু:

    • তারা হয় একটি তৈরি পেতে পারে tf.function বা উৎসুক প্রেক্ষাপটে, এবং এই tensors ভিন্নভাবে আচরণ
    • ব্যবহারের tf.Variable রাষ্ট্রপক্ষে গুলি, তারা সবসময় উভয় প্রেক্ষিতে থেকে ব্যবহারযোগ্য
    • tf.Tensors অন্তর্বর্তী মানের জন্য শুধুমাত্র

স্লিম এবং অবদানকারীদের উপর একটি নোট

পুরোনো TensorFlow 1.x কোডের একটি বৃহৎ পরিমাণ ব্যবহার স্লিম গ্রন্থাগার, যা TensorFlow 1.x সঙ্গে উপস্থিত ছিল tf.contrib.layers । হিসেবে contrib মডিউল, এই আর TensorFlow 2.x পাওয়া যায়, এমনকি tf.compat.v1 । TensorFlow 2.x করার স্লিম ব্যবহার রূপান্তর কোড আরো ভান্ডার ব্যবহার রূপান্তর চেয়ে জড়িত v1.layers । বস্তুত, এটা ইন্দ্রিয় আপনার স্লিম কোড রূপান্তর করতে করতে পারে v1.layers প্রথম, তারপর Keras রূপান্তর করুন।

  • সরান arg_scopes , সমস্ত args স্পষ্ট হতে হবে।
  • আপনি তাদের, বিভক্ত ব্যবহার করেন তাহলে normalizer_fn এবং activation_fn তাদের নিজস্ব স্তরসমূহে।
  • পৃথকযোগ্য রূপান্তর স্তরগুলি এক বা একাধিক পৃথক কেরাস স্তরগুলিতে মানচিত্র (গভীরতার সাথে, পয়েন্টওয়াইজ এবং পৃথক পৃথক কেরাস স্তর) ম্যাপ করে।
  • পাতলা এবং v1.layers বিভিন্ন যুক্তি নাম এবং ডিফল্ট মান আছে।
  • কিছু আরগের বিভিন্ন স্কেল থাকে।
  • আপনি ব্যবহার স্লিম প্রাক প্রশিক্ষিত মডেলের পারেন, থেকে Keras এর প্রাক traimed মডেলের চেষ্টা tf.keras.applications বা মেমরি হাব এর TensorFlow 2.x SavedModels মূল স্লিম কোড থেকে রপ্তানি।

কিছু tf.contrib স্তরগুলির নীচে TensorFlow সরানো পারে নি কিন্তু এর পরিবর্তে এ সরানো হয়েছে TensorFlow অ্যাডঅনস প্যাকেজ

প্রশিক্ষণ

একটা ফিড ডেটাতে অনেক উপায় আছে tf.keras মডেল। তারা পাইথন জেনারেটর এবং নম্পি অ্যারে ইনপুট হিসাবে গ্রহণ করবে।

একটি মডেল ফিড ডেটাতে প্রস্তাবিত উপায় ব্যবহার করা tf.data প্যাকেজ, কোন ডেটা সাধিত জন্য উচ্চ কার্যকারিতা শ্রেণীর একটি সংগ্রহ রয়েছে।

আপনি এখনও ব্যবহার করে থাকেন tf.queue , এই এখন শুধুমাত্র হিসাবে ডেটা-স্ট্রাকচার ইনপুট পাইপলাইনগুলি যেমন সমর্থিত নয়।

টেনসরফ্লো ডেটাসেট ব্যবহার করা

TensorFlow ডেটাসেটস প্যাকেজ ( tfds ) হিসাবে লোড পূর্বনির্ধারিত ডেটাসেট জন্য ইউটিলিটি রয়েছে tf.data.Dataset অবজেক্ট।

এই উদাহরণস্বরূপ, যদি আপনি ব্যবহার MNIST ডেটা সেটটি লোড করতে পারেন tfds :

datasets, info = tfds.load(name='mnist', with_info=True, as_supervised=True)
mnist_train, mnist_test = datasets['train'], datasets['test']

তারপরে প্রশিক্ষণের জন্য ডেটা প্রস্তুত করুন:

  • প্রতিটি চিত্র পুনরায় স্কেল করুন।
  • উদাহরণগুলির ক্রম পরিবর্তন করুন।
  • ইমেজ এবং লেবেলের ব্যাচগুলি সংগ্রহ করুন।
BUFFER_SIZE = 10 # Use a much larger value for real code
BATCH_SIZE = 64
NUM_EPOCHS = 5


def scale(image, label):
  image = tf.cast(image, tf.float32)
  image /= 255

  return image, label

উদাহরণটি সংক্ষিপ্ত রাখতে কেবল 5 টি ব্যাচ ফেরত দেওয়ার জন্য ডেটাসেটটি ছাঁটাই:

train_data = mnist_train.map(scale).shuffle(BUFFER_SIZE).batch(BATCH_SIZE)
test_data = mnist_test.map(scale).batch(BATCH_SIZE)

STEPS_PER_EPOCH = 5

train_data = train_data.take(STEPS_PER_EPOCH)
test_data = test_data.take(STEPS_PER_EPOCH)
image_batch, label_batch = next(iter(train_data))
2021-07-19 23:37:19.049077: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.

কেরাস প্রশিক্ষণের লুপগুলি ব্যবহার করুন

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

এই পদ্ধতির সুবিধার মধ্যে রয়েছে:

  • তারা Numpy অ্যারে, পাইথন জেনারেটর এবং গ্রহণ tf.data.Datasets
  • এগুলি নিয়মিতকরণ এবং অ্যাক্টিভেশন হ্রাস স্বয়ংক্রিয়ভাবে প্রয়োগ করে।
  • তারা সমর্থন tf.distribute বহু-ডিভাইস প্রশিক্ষণের জন্য
  • তারা ক্ষয়ক্ষতি এবং মেট্রিক হিসাবে নির্বিচারে কলযোগ্যদের সমর্থন করে।
  • তারা মত callbacks সমর্থন tf.keras.callbacks.TensorBoard , এবং কাস্টম callbacks।
  • তারা পারফর্ম্যান্ট, স্বয়ংক্রিয়ভাবে টেনসরফ্লো গ্রাফগুলি ব্যবহার করে।

এখানে একটি মডেল একটি ব্যবহার প্রশিক্ষণ একটি উদাহরণ Dataset । (কিভাবে এই কাজ, খুঁজে বার করো বিশদে জানার জন্য টিউটোরিয়াল অধ্যায়।)

model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, 3, activation='relu',
                           kernel_regularizer=tf.keras.regularizers.l2(0.02),
                           input_shape=(28, 28, 1)),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dropout(0.1),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Dense(10)
])

# Model is the full model w/o custom layers
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

model.fit(train_data, epochs=NUM_EPOCHS)
loss, acc = model.evaluate(test_data)

print("Loss {}, Accuracy {}".format(loss, acc))
Epoch 1/5
5/5 [==============================] - 2s 8ms/step - loss: 1.5874 - accuracy: 0.4719
Epoch 2/5
2021-07-19 23:37:20.919125: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
5/5 [==============================] - 0s 5ms/step - loss: 0.4435 - accuracy: 0.9094
Epoch 3/5
2021-07-19 23:37:21.242435: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
5/5 [==============================] - 0s 6ms/step - loss: 0.2764 - accuracy: 0.9594
Epoch 4/5
2021-07-19 23:37:21.576808: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
5/5 [==============================] - 0s 5ms/step - loss: 0.1889 - accuracy: 0.9844
Epoch 5/5
2021-07-19 23:37:21.888991: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
5/5 [==============================] - 1s 6ms/step - loss: 0.1504 - accuracy: 0.9906
2021-07-19 23:37:23.082199: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
5/5 [==============================] - 1s 3ms/step - loss: 1.6299 - accuracy: 0.7031
Loss 1.6299388408660889, Accuracy 0.703125
2021-07-19 23:37:23.932781: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.

আপনার নিজের লুপ লিখুন

Keras মডেলের প্রশিক্ষণ পদক্ষেপ আপনার জন্য কাজ করে, কিন্তু আপনি আরও নিয়ন্ত্রণ বাইরে পদক্ষেপ, ব্যবহারের বিষয়ে বিবেচনা প্রয়োজন tf.keras.Model.train_on_batch পদ্ধতি, আপনার নিজের ডেটা-পুনরাবৃত্তির লুপ।

মনে রাখবেন: অনেক কিছুই একটি হিসাবে প্রয়োগ করা যেতে পারে tf.keras.callbacks.Callback

এই পদ্ধতিটিতে পূর্ববর্তী বিভাগে উল্লিখিত পদ্ধতিগুলির অনেকগুলি সুবিধা রয়েছে তবে এটি বাইরের লুপের ব্যবহারকারীর নিয়ন্ত্রণ দেয়।

এছাড়াও আপনি ব্যবহার করতে পারেন tf.keras.Model.test_on_batch বা tf.keras.Model.evaluate প্রশিক্ষণের সময় চেক কার্য-সম্পাদনায়।

উপরোক্ত মডেলটির প্রশিক্ষণ চালিয়ে যেতে:

# Model is the full model w/o custom layers
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

for epoch in range(NUM_EPOCHS):
  # Reset the metric accumulators
  model.reset_metrics()

  for image_batch, label_batch in train_data:
    result = model.train_on_batch(image_batch, label_batch)
    metrics_names = model.metrics_names
    print("train: ",
          "{}: {:.3f}".format(metrics_names[0], result[0]),
          "{}: {:.3f}".format(metrics_names[1], result[1]))
  for image_batch, label_batch in test_data:
    result = model.test_on_batch(image_batch, label_batch,
                                 # Return accumulated metrics
                                 reset_metrics=False)
  metrics_names = model.metrics_names
  print("\neval: ",
        "{}: {:.3f}".format(metrics_names[0], result[0]),
        "{}: {:.3f}".format(metrics_names[1], result[1]))
train:  loss: 0.131 accuracy: 1.000
train:  loss: 0.179 accuracy: 0.969
train:  loss: 0.117 accuracy: 0.984
train:  loss: 0.187 accuracy: 0.969
train:  loss: 0.168 accuracy: 0.969
2021-07-19 23:37:24.758128: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
2021-07-19 23:37:25.476778: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
eval:  loss: 1.655 accuracy: 0.703
train:  loss: 0.083 accuracy: 1.000
train:  loss: 0.080 accuracy: 1.000
train:  loss: 0.099 accuracy: 0.984
train:  loss: 0.088 accuracy: 1.000
train:  loss: 0.084 accuracy: 1.000
2021-07-19 23:37:25.822978: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
2021-07-19 23:37:26.103858: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
eval:  loss: 1.645 accuracy: 0.759
train:  loss: 0.066 accuracy: 1.000
train:  loss: 0.070 accuracy: 1.000
train:  loss: 0.062 accuracy: 1.000
train:  loss: 0.067 accuracy: 1.000
train:  loss: 0.061 accuracy: 1.000
2021-07-19 23:37:26.454306: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
2021-07-19 23:37:26.715112: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
eval:  loss: 1.609 accuracy: 0.819
train:  loss: 0.056 accuracy: 1.000
train:  loss: 0.053 accuracy: 1.000
train:  loss: 0.048 accuracy: 1.000
train:  loss: 0.057 accuracy: 1.000
train:  loss: 0.069 accuracy: 0.984
2021-07-19 23:37:27.059747: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
2021-07-19 23:37:27.327066: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
eval:  loss: 1.568 accuracy: 0.825
train:  loss: 0.048 accuracy: 1.000
train:  loss: 0.048 accuracy: 1.000
train:  loss: 0.044 accuracy: 1.000
train:  loss: 0.045 accuracy: 1.000
train:  loss: 0.045 accuracy: 1.000
2021-07-19 23:37:28.593597: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
eval:  loss: 1.531 accuracy: 0.841
2021-07-19 23:37:29.220455: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.

প্রশিক্ষণের পদক্ষেপটি কাস্টমাইজ করুন

আপনার যদি আরও নমনীয়তা এবং নিয়ন্ত্রণের প্রয়োজন হয় তবে আপনি নিজের প্রশিক্ষণ লুপ প্রয়োগ করে এটি পেতে পারেন। তিনটি পদক্ষেপ রয়েছে:

  1. পুনরুক্তি একটি পাইথন জেনারেটর বা তার tf.data.Dataset উদাহরণ কয়েক ব্যাচ জন্য।
  2. ব্যবহার করুন tf.GradientTape সংগ্রহ গ্রেডিয়েন্ট করতে।
  3. একটি ব্যবহার করুন tf.keras.optimizers মডেলের ভেরিয়েবল ওজন আপডেট প্রযোজ্য হবে।

মনে রাখবেন:

  • সর্বদা একটি অন্তর্ভুক্ত training উপর যুক্তি call subclassed স্তর ও মডেলের পদ্ধতি।
  • সঙ্গে মডেল কল করতে ভুলবেন না training যুক্তি সেট সঠিকভাবে।
  • ব্যবহারের উপর নির্ভর করে, মডেল ভেরিয়েবলগুলি অস্তিত্বের অস্তিত্ব থাকতে পারে যতক্ষণ না মডেলটি ডেটা ব্যাচে চালিত হয়।
  • মডেলটির জন্য নিয়মিতকরণ ক্ষতির মতো জিনিসগুলি আপনাকে ম্যানুয়ালি হ্যান্ডেল করতে হবে।

ভি 1 এর তুলনায় সরলকরণগুলি নোট করুন:

  • ভেরিয়েবল ইনিশিয়েলাইজার চালানোর দরকার নেই। চলকগুলি তৈরির সূচনা হয়।
  • ম্যানুয়াল নিয়ন্ত্রণ নির্ভরতা যুক্ত করার প্রয়োজন নেই। এমনকি tf.function অপারেশন উৎসুক মোড হিসাবে কাজ করে।
model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, 3, activation='relu',
                           kernel_regularizer=tf.keras.regularizers.l2(0.02),
                           input_shape=(28, 28, 1)),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dropout(0.1),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Dense(10)
])

optimizer = tf.keras.optimizers.Adam(0.001)
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)

@tf.function
def train_step(inputs, labels):
  with tf.GradientTape() as tape:
    predictions = model(inputs, training=True)
    regularization_loss=tf.math.add_n(model.losses)
    pred_loss=loss_fn(labels, predictions)
    total_loss=pred_loss + regularization_loss

  gradients = tape.gradient(total_loss, model.trainable_variables)
  optimizer.apply_gradients(zip(gradients, model.trainable_variables))

for epoch in range(NUM_EPOCHS):
  for inputs, labels in train_data:
    train_step(inputs, labels)
  print("Finished epoch", epoch)
2021-07-19 23:37:29.998049: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
Finished epoch 0
2021-07-19 23:37:30.316333: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
Finished epoch 1
2021-07-19 23:37:30.618560: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
Finished epoch 2
2021-07-19 23:37:30.946881: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
Finished epoch 3
Finished epoch 4
2021-07-19 23:37:31.261594: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.

নতুন স্টাইলের মেট্রিক্স এবং লোকসান

টেনসরফ্লো ২.x এ, মেট্রিক্স এবং ক্ষয়গুলি হ'ল বস্তু। এই কাজগুলি উভয় সাগ্রহে এবং tf.function গুলি।

একটি ক্ষতির বস্তু কলযোগ্য, এবং (y_true, y_pred) আর্গুমেন্ট হিসাবে প্রত্যাশা করে:

cce = tf.keras.losses.CategoricalCrossentropy(from_logits=True)
cce([[1, 0]], [[-1.0,3.0]]).numpy()
4.01815

একটি মেট্রিক অবজেক্টের নিম্নলিখিত পদ্ধতি রয়েছে:

  • Metric.update_state() : নতুন পর্যবেক্ষণ যোগ করুন।
  • Metric.result() : মেট্রিক বর্তমান ফলাফলের পেতে, পর্যবেক্ষিত মান দেওয়া।
  • Metric.reset_states() : সব পর্যবেক্ষণ সাফ করুন।

বস্তুটি নিজেই কলযোগ্য। নতুন পর্যবেক্ষণের সঙ্গে আপডেট রাষ্ট্র কলিং সঙ্গে যেমন update_state এবং মেট্রিক নতুন ফলাফল দেখায়।

আপনাকে মেট্রিকের ম্যানুয়ালি ভেরিয়েবলগুলি ম্যানুয়ালি আরম্ভ করতে হবে না, এবং যেহেতু টেনসরফ্লো ২.x এর স্বয়ংক্রিয় নিয়ন্ত্রণ নির্ভরতা রয়েছে, সেগুলি নিয়ে আপনাকেও উদ্বিগ্ন হওয়ার দরকার নেই।

নীচের কোডটি একটি কাস্টম প্রশিক্ষণ লুপের মধ্যে পরিলক্ষিত গড় ক্ষতির খোঁজ রাখতে একটি মেট্রিক ব্যবহার করে।

# Create the metrics
loss_metric = tf.keras.metrics.Mean(name='train_loss')
accuracy_metric = tf.keras.metrics.SparseCategoricalAccuracy(name='train_accuracy')

@tf.function
def train_step(inputs, labels):
  with tf.GradientTape() as tape:
    predictions = model(inputs, training=True)
    regularization_loss=tf.math.add_n(model.losses)
    pred_loss=loss_fn(labels, predictions)
    total_loss=pred_loss + regularization_loss

  gradients = tape.gradient(total_loss, model.trainable_variables)
  optimizer.apply_gradients(zip(gradients, model.trainable_variables))
  # Update the metrics
  loss_metric.update_state(total_loss)
  accuracy_metric.update_state(labels, predictions)


for epoch in range(NUM_EPOCHS):
  # Reset the metrics
  loss_metric.reset_states()
  accuracy_metric.reset_states()

  for inputs, labels in train_data:
    train_step(inputs, labels)
  # Get the metric results
  mean_loss=loss_metric.result()
  mean_accuracy = accuracy_metric.result()

  print('Epoch: ', epoch)
  print('  loss:     {:.3f}'.format(mean_loss))
  print('  accuracy: {:.3f}'.format(mean_accuracy))
2021-07-19 23:37:31.878403: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
Epoch:  0
  loss:     0.172
  accuracy: 0.988
2021-07-19 23:37:32.177136: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
Epoch:  1
  loss:     0.143
  accuracy: 0.997
2021-07-19 23:37:32.493570: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
Epoch:  2
  loss:     0.126
  accuracy: 0.997
2021-07-19 23:37:32.807739: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
Epoch:  3
  loss:     0.109
  accuracy: 1.000
Epoch:  4
  loss:     0.092
  accuracy: 1.000
2021-07-19 23:37:33.155028: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.

কেরাস মেট্রিক নাম

টেনসরফ্লো ২.x এ কেরাস মডেলগুলি মেট্রিকের নামগুলি পরিচালনা করার বিষয়ে আরও সামঞ্জস্যপূর্ণ।

এখন যখন আপনি মেট্রিক্স তালিকায় একটি স্ট্রিং পাস, যে সঠিক স্ট্রিং মেট্রিক এর হিসাবে ব্যবহার করা হয় name । এই নাম দ্বারা ফিরে ইতিহাস বস্তুর দৃশ্যমান model.fit , এবং লগ প্রেরণ keras.callbacks । আপনি মেট্রিক তালিকায় পাস স্ট্রিংয়ে সেট করা আছে।

model.compile(
    optimizer = tf.keras.optimizers.Adam(0.001),
    loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics = ['acc', 'accuracy', tf.keras.metrics.SparseCategoricalAccuracy(name="my_accuracy")])
history = model.fit(train_data)
5/5 [==============================] - 1s 6ms/step - loss: 0.1042 - acc: 0.9969 - accuracy: 0.9969 - my_accuracy: 0.9969
2021-07-19 23:37:34.039643: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
history.history.keys()
dict_keys(['loss', 'acc', 'accuracy', 'my_accuracy'])

পূর্ববর্তী সংস্করণ থেকে এই পৃথক যেখানে ক্ষণস্থায়ী metrics=["accuracy"] স্থাপিত হবে dict_keys(['loss', 'acc'])

কেরাস অপ্টিমাইজার

মধ্যে optimizers v1.train যেমন v1.train.AdamOptimizer এবং v1.train.GradientDescentOptimizer মধ্যে সমতুল আছে tf.keras.optimizers

রূপান্তর করুন v1.train করার keras.optimizers

আপনার অপ্টিমাইজারকে রূপান্তর করার সময় এখানে জিনিসগুলি মনে রাখা উচিত:

কিছু এর জন্য নতুন অক্ষমতা tf.keras.optimizers

জন্য কোন পরিবর্তন নেই optimizers.SGD , optimizers.Adam , অথবা optimizers.RMSprop

নিম্নলিখিত ডিফল্ট শেখার হারগুলি পরিবর্তিত হয়েছে:

টেনসরবোর্ড

TensorFlow 2.x গুরুত্বপূর্ণ পরিবর্তন অন্তর্ভুক্ত tf.summary TensorBoard মধ্যে ঠাহর জন্য লেখ সারসংক্ষেপ ডেটাতে ব্যবহৃত API- টি। নতুন একটি সাধারণ পরিচয়ের জন্য tf.summary , আছে বিভিন্ন উপলব্ধ টিউটোরিয়াল যে TensorFlow 2.x API ব্যবহার করুন। এই অন্তর্ভুক্ত TensorBoard TensorFlow 2.x মাইগ্রেশন নির্দেশিকা

সংরক্ষণ এবং লোড হচ্ছে

চেকপয়েন্ট সামঞ্জস্য

TensorFlow 2.x ব্যবহারসমূহ আপত্তি ভিত্তিক চেকপয়েন্ট

আপনি যদি সাবধান হন তবে পুরানো স্টাইলের নাম ভিত্তিক চেকপয়েন্টগুলি এখনও লোড করা যায়। কোড রূপান্তর প্রক্রিয়াটির ফলে পরিবর্তনশীল নাম পরিবর্তন হতে পারে তবে কার্যকারণ রয়েছে।

চেকপয়েন্টে থাকা নামগুলির সাথে নতুন মডেলের নামগুলি সীমাবদ্ধ করার জন্য এটি সহজতম পদ্ধতির:

  • ভেরিয়েবল এখনও সব আছে name যুক্তি আপনি নির্ধারণ করতে পারেন।
  • Keras মডেলের একটি নিতে name যুক্তি যা তারা তাদের ভেরিয়েবলের জন্য উপসর্গ হিসাবে সেট।
  • v1.name_scope ফাংশন পরিবর্তনশীল নাম উপসর্গ সেট করতে ব্যবহার করা যাবে। এই থেকে ভিন্ন tf.variable_scope । এটি কেবল নামগুলিকে প্রভাবিত করে এবং ভেরিয়েবলগুলি ট্র্যাক করে এবং পুনরায় ব্যবহার করে না।

যদি এটি আপনার ব্যবহারের ক্ষেত্রে জন্য কাজ না করে, চেষ্টা v1.train.init_from_checkpoint ফাংশন। এটি একটি সময় লাগে assignment_map যুক্তি, যা নতুন নাম পুরানো নাম থেকে ম্যাপিং নির্দিষ্ট করে।

TensorFlow মূল্নির্ধারক সংগ্রহস্থলের একটি অন্তর্ভুক্ত কনভার্সন টুল TensorFlow 1.x থেকে 2.0 premade estimators জন্য চেকপয়েন্ট আপগ্রেড করার। এটি অনুরূপ ব্যবহারের ক্ষেত্রে কীভাবে একটি সরঞ্জাম তৈরি করবেন তার উদাহরণ হিসাবে কাজ করতে পারে।

সংরক্ষিত মডেলগুলির সামঞ্জস্য

সংরক্ষিত মডেলগুলির জন্য কোনও উল্লেখযোগ্য সামঞ্জস্যতা উদ্বেগ নেই।

  • টেনসরফ্লো 1.x সেভড_ মডেলগুলি টেনসরফ্লো 2.x এ কাজ করে
  • সমস্ত অপস সমর্থিত হলে টেনসরফ্লো ২.x সেভড_মোডেলগুলি টেনসরফ্লো ১.x এ কাজ করে।

একটি গ্রাফ.পিবি বা গ্রাফ.পিবিটিেক্সট

একটি কাঁচা আপগ্রেড করার কোন সহজবোধ্য উপায় নেই Graph.pb TensorFlow 2.x. ফাইল আপনার সেরা বেটটি কোডটি আপগ্রেড করা যা ফাইলটি উত্পন্ন করে।

কিন্তু, যদি আপনি একটি "হিমায়িত গ্রাফ" (একটি আছে tf.Graph যেখানে ভেরিয়েবল ধ্রুবক পরিণত হয়েছে), তারপর এটা সম্ভব একটি রূপান্তর করার জন্য হয় concrete_function ব্যবহার v1.wrap_function :

def wrap_frozen_graph(graph_def, inputs, outputs):
  def _imports_graph_def():
    tf.compat.v1.import_graph_def(graph_def, name="")
  wrapped_import = tf.compat.v1.wrap_function(_imports_graph_def, [])
  import_graph = wrapped_import.graph
  return wrapped_import.prune(
      tf.nest.map_structure(import_graph.as_graph_element, inputs),
      tf.nest.map_structure(import_graph.as_graph_element, outputs))

উদাহরণস্বরূপ, ২০১ from সাল থেকে ইনসেপশন ভি 1 এর হিমায়িত গ্রাফ এখানে রয়েছে:

path = tf.keras.utils.get_file(
    'inception_v1_2016_08_28_frozen.pb',
    'http://storage.googleapis.com/download.tensorflow.org/models/inception_v1_2016_08_28_frozen.pb.tar.gz',
    untar=True)
Downloading data from http://storage.googleapis.com/download.tensorflow.org/models/inception_v1_2016_08_28_frozen.pb.tar.gz
24698880/24695710 [==============================] - 1s 0us/step

লোড tf.GraphDef :

graph_def = tf.compat.v1.GraphDef()
loaded = graph_def.ParseFromString(open(path,'rb').read())

এটি মোড়ানো একটি মধ্যে concrete_function :

inception_func = wrap_frozen_graph(
    graph_def, inputs='input:0',
    outputs='InceptionV1/InceptionV1/Mixed_3b/Branch_1/Conv2d_0a_1x1/Relu:0')

ইনপুট হিসাবে এটি একটি সেন্সর পাস:

input_img = tf.ones([1,224,224,3], dtype=tf.float32)
inception_func(input_img).shape
TensorShape([1, 28, 28, 96])

অনুমানকারী

অনুমানকারীদের সাথে প্রশিক্ষণ

টেনসরফ্লো ২.x এ অনুমানকারীগুলি সমর্থিত।

আপনি estimators ব্যবহার করেন, তখন আপনি ব্যবহার করতে পারেন input_fn , tf.estimator.TrainSpec এবং tf.estimator.EvalSpec TensorFlow 1.x. থেকে

এখানে ব্যবহার একটি উদাহরণ input_fn ট্রেন নিয়ে এবং চশমা নির্ণয় করা।

ইনপুট_ফএন এবং ট্রেন / ইভাল স্পেস তৈরি করা হচ্ছে

# Define the estimator's input_fn
def input_fn():
  datasets, info = tfds.load(name='mnist', with_info=True, as_supervised=True)
  mnist_train, mnist_test = datasets['train'], datasets['test']

  BUFFER_SIZE = 10000
  BATCH_SIZE = 64

  def scale(image, label):
    image = tf.cast(image, tf.float32)
    image /= 255

    return image, label[..., tf.newaxis]

  train_data = mnist_train.map(scale).shuffle(BUFFER_SIZE).batch(BATCH_SIZE)
  return train_data.repeat()

# Define train and eval specs
train_spec = tf.estimator.TrainSpec(input_fn=input_fn,
                                    max_steps=STEPS_PER_EPOCH * NUM_EPOCHS)
eval_spec = tf.estimator.EvalSpec(input_fn=input_fn,
                                  steps=STEPS_PER_EPOCH)

একটি কেরাস মডেল সংজ্ঞা ব্যবহার করে

টেনসরফ্লো ২.x এ আপনার অনুমানকারী কীভাবে তৈরি করবেন সে সম্পর্কে কিছু পার্থক্য রয়েছে

এটা তোলে সুপারিশ করা হচ্ছে যে আপনি Keras ব্যবহার করে আপনার মডেল নির্ধারণ করুন, তারপর ব্যবহার tf.keras.estimator.model_to_estimator একটি মূল্নির্ধারক মধ্যে আপনার মডেল চালু করতে ইউটিলিটি। কোনও অনুমানকারী তৈরি এবং প্রশিক্ষণ দেওয়ার সময় নীচের কোডটি কীভাবে এই ইউটিলিটিটি ব্যবহার করবেন তা দেখায়।

def make_model():
  return tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, 3, activation='relu',
                           kernel_regularizer=tf.keras.regularizers.l2(0.02),
                           input_shape=(28, 28, 1)),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dropout(0.1),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Dense(10)
  ])
model = make_model()

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

estimator = tf.keras.estimator.model_to_estimator(
  keras_model = model
)

tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)
INFO:tensorflow:Using default config.
INFO:tensorflow:Using default config.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpbhtumut0
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpbhtumut0
INFO:tensorflow:Using the Keras model provided.
INFO:tensorflow:Using the Keras model provided.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/keras/layers/normalization.py:534: _colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:
Colocations handled automatically by placer.
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/keras/backend.py:435: UserWarning: `tf.keras.backend.set_learning_phase` is deprecated and will be removed after 2020-10-11. To update it, simply pass a True/False value to the `training` argument of the `__call__` method of your layer or model.
  warnings.warn('`tf.keras.backend.set_learning_phase` is deprecated and '
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/keras/layers/normalization.py:534: _colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:
Colocations handled automatically by placer.
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpbhtumut0', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_checkpoint_save_graph_def': True, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}
2021-07-19 23:37:36.453946: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:36.454330: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties: 
pciBusID: 0000:00:05.0 name: NVIDIA Tesla V100-SXM2-16GB computeCapability: 7.0
coreClock: 1.53GHz coreCount: 80 deviceMemorySize: 15.78GiB deviceMemoryBandwidth: 836.37GiB/s
2021-07-19 23:37:36.454461: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:36.454737: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:36.454977: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0
2021-07-19 23:37:36.455020: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1258] Device interconnect StreamExecutor with strength 1 edge matrix:
2021-07-19 23:37:36.455027: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1264]      0 
2021-07-19 23:37:36.455033: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1277] 0:   N 
2021-07-19 23:37:36.455126: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:36.455479: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:36.455779: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1418] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 14646 MB memory) -> physical GPU (device: 0, name: NVIDIA Tesla V100-SXM2-16GB, pci bus id: 0000:00:05.0, compute capability: 7.0)
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpbhtumut0', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_checkpoint_save_graph_def': True, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}
INFO:tensorflow:Not using Distribute Coordinator.
INFO:tensorflow:Not using Distribute Coordinator.
INFO:tensorflow:Running training and evaluation locally (non-distributed).
INFO:tensorflow:Running training and evaluation locally (non-distributed).
INFO:tensorflow:Start train and evaluate loop. The evaluate will happen after every checkpoint. Checkpoint frequency is determined based on RunConfig arguments: save_checkpoints_steps None or save_checkpoints_secs 600.
INFO:tensorflow:Start train and evaluate loop. The evaluate will happen after every checkpoint. Checkpoint frequency is determined based on RunConfig arguments: save_checkpoints_steps None or save_checkpoints_secs 600.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/training/training_util.py:236: Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version.
Instructions for updating:
Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/training/training_util.py:236: Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version.
Instructions for updating:
Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Warm-starting with WarmStartSettings: WarmStartSettings(ckpt_to_initialize_from='/tmp/tmpbhtumut0/keras/keras_model.ckpt', vars_to_warm_start='.*', var_name_to_vocab_info={}, var_name_to_prev_var_name={})
INFO:tensorflow:Warm-starting with WarmStartSettings: WarmStartSettings(ckpt_to_initialize_from='/tmp/tmpbhtumut0/keras/keras_model.ckpt', vars_to_warm_start='.*', var_name_to_vocab_info={}, var_name_to_prev_var_name={})
INFO:tensorflow:Warm-starting from: /tmp/tmpbhtumut0/keras/keras_model.ckpt
INFO:tensorflow:Warm-starting from: /tmp/tmpbhtumut0/keras/keras_model.ckpt
INFO:tensorflow:Warm-starting variables only in TRAINABLE_VARIABLES.
INFO:tensorflow:Warm-starting variables only in TRAINABLE_VARIABLES.
INFO:tensorflow:Warm-started 8 variables.
INFO:tensorflow:Warm-started 8 variables.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
2021-07-19 23:37:39.175917: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:39.176299: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties: 
pciBusID: 0000:00:05.0 name: NVIDIA Tesla V100-SXM2-16GB computeCapability: 7.0
coreClock: 1.53GHz coreCount: 80 deviceMemorySize: 15.78GiB deviceMemoryBandwidth: 836.37GiB/s
2021-07-19 23:37:39.176424: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:39.176729: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:39.176999: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0
2021-07-19 23:37:39.177042: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1258] Device interconnect StreamExecutor with strength 1 edge matrix:
2021-07-19 23:37:39.177050: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1264]      0 
2021-07-19 23:37:39.177057: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1277] 0:   N 
2021-07-19 23:37:39.177159: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:39.177481: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:39.177761: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1418] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 14646 MB memory) -> physical GPU (device: 0, name: NVIDIA Tesla V100-SXM2-16GB, pci bus id: 0000:00:05.0, compute capability: 7.0)
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpbhtumut0/model.ckpt.
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpbhtumut0/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 3.1193407, step = 0
INFO:tensorflow:loss = 3.1193407, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 25...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 25...
INFO:tensorflow:Saving checkpoints for 25 into /tmp/tmpbhtumut0/model.ckpt.
INFO:tensorflow:Saving checkpoints for 25 into /tmp/tmpbhtumut0/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 25...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 25...
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py:2426: UserWarning: `Model.state_updates` will be removed in a future version. This property should not be used in TensorFlow 2.0, as `updates` are applied automatically.
  warnings.warn('`Model.state_updates` will be removed in a future version. '
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2021-07-19T23:37:42
INFO:tensorflow:Starting evaluation at 2021-07-19T23:37:42
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
2021-07-19 23:37:42.476830: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:42.477207: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties: 
pciBusID: 0000:00:05.0 name: NVIDIA Tesla V100-SXM2-16GB computeCapability: 7.0
coreClock: 1.53GHz coreCount: 80 deviceMemorySize: 15.78GiB deviceMemoryBandwidth: 836.37GiB/s
2021-07-19 23:37:42.477339: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:42.477648: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:42.477910: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0
2021-07-19 23:37:42.477955: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1258] Device interconnect StreamExecutor with strength 1 edge matrix:
2021-07-19 23:37:42.477963: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1264]      0 
2021-07-19 23:37:42.477969: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1277] 0:   N 
2021-07-19 23:37:42.478058: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:42.478332: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
INFO:tensorflow:Restoring parameters from /tmp/tmpbhtumut0/model.ckpt-25
2021-07-19 23:37:42.478592: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1418] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 14646 MB memory) -> physical GPU (device: 0, name: NVIDIA Tesla V100-SXM2-16GB, pci bus id: 0000:00:05.0, compute capability: 7.0)
INFO:tensorflow:Restoring parameters from /tmp/tmpbhtumut0/model.ckpt-25
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [1/5]
INFO:tensorflow:Evaluation [1/5]
INFO:tensorflow:Evaluation [2/5]
INFO:tensorflow:Evaluation [2/5]
INFO:tensorflow:Evaluation [3/5]
INFO:tensorflow:Evaluation [3/5]
INFO:tensorflow:Evaluation [4/5]
INFO:tensorflow:Evaluation [4/5]
INFO:tensorflow:Evaluation [5/5]
INFO:tensorflow:Evaluation [5/5]
INFO:tensorflow:Inference Time : 1.02146s
2021-07-19 23:37:43.437293: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
INFO:tensorflow:Inference Time : 1.02146s
INFO:tensorflow:Finished evaluation at 2021-07-19-23:37:43
INFO:tensorflow:Finished evaluation at 2021-07-19-23:37:43
INFO:tensorflow:Saving dict for global step 25: accuracy = 0.634375, global_step = 25, loss = 1.493957
INFO:tensorflow:Saving dict for global step 25: accuracy = 0.634375, global_step = 25, loss = 1.493957
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 25: /tmp/tmpbhtumut0/model.ckpt-25
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 25: /tmp/tmpbhtumut0/model.ckpt-25
INFO:tensorflow:Loss for final step: 0.37796202.
2021-07-19 23:37:43.510911: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
INFO:tensorflow:Loss for final step: 0.37796202.
({'accuracy': 0.634375, 'loss': 1.493957, 'global_step': 25}, [])

একটি কাস্টম ব্যবহার model_fn

আপনি যদি একটি বিদ্যমান কাস্টম মূল্নির্ধারক যদি model_fn আপনি বজায় রাখার জন্য, আপনি আপনার রূপান্তর করতে পারেন model_fn একটি Keras মডেল ব্যবহার করতে।

যাইহোক, সামঞ্জস্য কারণে একটি কাস্টম model_fn এখনও 1.x ধাঁচের গ্রাফ মোডে চালানো হবে। এর অর্থ এখানে কোন উত্সাহী কার্যকর করা এবং কোনও স্বয়ংক্রিয় নিয়ন্ত্রণ নির্ভরতা নেই।

নূন্যতম পরিবর্তন সহ কাস্টম মডেল_ফএন

আপনার কাস্টম করতে model_fn TensorFlow 2.x কাজ, যদি আপনি যদি বিদ্যমান কোডে ন্যূনতম পরিবর্তন পছন্দ করেন, tf.compat.v1 যেমন চিহ্ন optimizers এবং metrics ব্যবহার করা যাবে।

একটি কাস্টম একটি Keras মডেল ব্যবহার model_fn একটি কাস্টম প্রশিক্ষণ লুপ এটি ব্যবহার অনুরূপ:

  • সেট training ফেজ উপযুক্তভাবে উপর ভিত্তি করে mode যুক্তি।
  • স্পষ্টভাবে মডেলের পাস trainable_variables অপটিমাইজার রয়েছে।

কিন্তু গুরুত্বপূর্ণ পার্থক্য, একটি আপেক্ষিক হয় কাস্টম লুপ :

  • ব্যবহার করার পরিবর্তে Model.losses ব্যবহার লোকসান নিষ্কর্ষ Model.get_losses_for
  • ব্যবহার মডেল এর আপডেটগুলি এক্সট্র্যাক্ট Model.get_updates_for

নিম্নলিখিত কোড কোনও কাস্টম থেকে একটি মূল্নির্ধারক সৃষ্টি model_fn , এই উদ্বেগের সব ব্যাখ্যা।

def my_model_fn(features, labels, mode):
  model = make_model()

  optimizer = tf.compat.v1.train.AdamOptimizer()
  loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)

  training = (mode == tf.estimator.ModeKeys.TRAIN)
  predictions = model(features, training=training)

  if mode == tf.estimator.ModeKeys.PREDICT:
    return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions)

  reg_losses = model.get_losses_for(None) + model.get_losses_for(features)
  total_loss=loss_fn(labels, predictions) + tf.math.add_n(reg_losses)

  accuracy = tf.compat.v1.metrics.accuracy(labels=labels,
                                           predictions=tf.math.argmax(predictions, axis=1),
                                           name='acc_op')

  update_ops = model.get_updates_for(None) + model.get_updates_for(features)
  minimize_op = optimizer.minimize(
      total_loss,
      var_list=model.trainable_variables,
      global_step=tf.compat.v1.train.get_or_create_global_step())
  train_op = tf.group(minimize_op, update_ops)

  return tf.estimator.EstimatorSpec(
    mode=mode,
    predictions=predictions,
    loss=total_loss,
    train_op=train_op, eval_metric_ops={'accuracy': accuracy})

# Create the Estimator & Train
estimator = tf.estimator.Estimator(model_fn=my_model_fn)
tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)
INFO:tensorflow:Using default config.
INFO:tensorflow:Using default config.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpqiom6a5s
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpqiom6a5s
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpqiom6a5s', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_checkpoint_save_graph_def': True, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpqiom6a5s', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_checkpoint_save_graph_def': True, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}
INFO:tensorflow:Not using Distribute Coordinator.
INFO:tensorflow:Not using Distribute Coordinator.
INFO:tensorflow:Running training and evaluation locally (non-distributed).
INFO:tensorflow:Running training and evaluation locally (non-distributed).
INFO:tensorflow:Start train and evaluate loop. The evaluate will happen after every checkpoint. Checkpoint frequency is determined based on RunConfig arguments: save_checkpoints_steps None or save_checkpoints_secs 600.
INFO:tensorflow:Start train and evaluate loop. The evaluate will happen after every checkpoint. Checkpoint frequency is determined based on RunConfig arguments: save_checkpoints_steps None or save_checkpoints_secs 600.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
2021-07-19 23:37:46.140692: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:46.141065: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties: 
pciBusID: 0000:00:05.0 name: NVIDIA Tesla V100-SXM2-16GB computeCapability: 7.0
coreClock: 1.53GHz coreCount: 80 deviceMemorySize: 15.78GiB deviceMemoryBandwidth: 836.37GiB/s
2021-07-19 23:37:46.141220: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:46.141517: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:46.141765: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0
2021-07-19 23:37:46.141807: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1258] Device interconnect StreamExecutor with strength 1 edge matrix:
2021-07-19 23:37:46.141814: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1264]      0 
2021-07-19 23:37:46.141820: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1277] 0:   N 
2021-07-19 23:37:46.141907: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:46.142234: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:46.142497: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1418] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 14646 MB memory) -> physical GPU (device: 0, name: NVIDIA Tesla V100-SXM2-16GB, pci bus id: 0000:00:05.0, compute capability: 7.0)
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpqiom6a5s/model.ckpt.
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpqiom6a5s/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 2.9167266, step = 0
INFO:tensorflow:loss = 2.9167266, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 25...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 25...
INFO:tensorflow:Saving checkpoints for 25 into /tmp/tmpqiom6a5s/model.ckpt.
INFO:tensorflow:Saving checkpoints for 25 into /tmp/tmpqiom6a5s/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 25...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 25...
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2021-07-19T23:37:49
INFO:tensorflow:Starting evaluation at 2021-07-19T23:37:49
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmpqiom6a5s/model.ckpt-25
2021-07-19 23:37:49.640699: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:49.641091: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties: 
pciBusID: 0000:00:05.0 name: NVIDIA Tesla V100-SXM2-16GB computeCapability: 7.0
coreClock: 1.53GHz coreCount: 80 deviceMemorySize: 15.78GiB deviceMemoryBandwidth: 836.37GiB/s
2021-07-19 23:37:49.641238: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:49.641580: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:49.641848: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0
2021-07-19 23:37:49.641893: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1258] Device interconnect StreamExecutor with strength 1 edge matrix:
2021-07-19 23:37:49.641901: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1264]      0 
2021-07-19 23:37:49.641910: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1277] 0:   N 
2021-07-19 23:37:49.642029: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:49.642355: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:49.642657: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1418] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 14646 MB memory) -> physical GPU (device: 0, name: NVIDIA Tesla V100-SXM2-16GB, pci bus id: 0000:00:05.0, compute capability: 7.0)
INFO:tensorflow:Restoring parameters from /tmp/tmpqiom6a5s/model.ckpt-25
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [1/5]
INFO:tensorflow:Evaluation [1/5]
INFO:tensorflow:Evaluation [2/5]
INFO:tensorflow:Evaluation [2/5]
INFO:tensorflow:Evaluation [3/5]
INFO:tensorflow:Evaluation [3/5]
INFO:tensorflow:Evaluation [4/5]
INFO:tensorflow:Evaluation [4/5]
INFO:tensorflow:Evaluation [5/5]
INFO:tensorflow:Evaluation [5/5]
INFO:tensorflow:Inference Time : 1.38362s
2021-07-19 23:37:50.924973: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
INFO:tensorflow:Inference Time : 1.38362s
INFO:tensorflow:Finished evaluation at 2021-07-19-23:37:50
INFO:tensorflow:Finished evaluation at 2021-07-19-23:37:50
INFO:tensorflow:Saving dict for global step 25: accuracy = 0.70625, global_step = 25, loss = 1.6135181
INFO:tensorflow:Saving dict for global step 25: accuracy = 0.70625, global_step = 25, loss = 1.6135181
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 25: /tmp/tmpqiom6a5s/model.ckpt-25
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 25: /tmp/tmpqiom6a5s/model.ckpt-25
INFO:tensorflow:Loss for final step: 0.60315084.
2021-07-19 23:37:51.035953: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
INFO:tensorflow:Loss for final step: 0.60315084.
({'accuracy': 0.70625, 'loss': 1.6135181, 'global_step': 25}, [])

কাস্টম model_fn TensorFlow 2.x চিহ্ন দিয়ে

আপনি সব TensorFlow 1.x প্রতীক পরিত্রাণ পেতে এবং আপনার কাস্টম আপগ্রেড করতে চান, model_fn করার TensorFlow 2.x, আপনি অপটিমাইজার এবং বৈশিষ্ট্যের মান আপডেট করা দরকার tf.keras.optimizers এবং tf.keras.metrics

কাস্টম সালে model_fn , উপরোক্ত ব্যতীত পরিবর্তন , আরো আপগ্রেড করা প্রয়োজন:

  • ব্যবহারের tf.keras.optimizers পরিবর্তে v1.train.Optimizer
  • স্পষ্টভাবে মডেলের পাস trainable_variables করার tf.keras.optimizers
  • গনা train_op/minimize_op ,
    • ব্যবহারের Optimizer.get_updates যদি ক্ষতি স্কালে ক্ষতি Tensor (ক callable নয়)। ফিরে তালিকায় প্রথম উপাদান আকাঙ্ক্ষিত হয় train_op/minimize_op
    • তাহলে ক্ষতি (যেমন একটি ফাংশন হিসাবে) একটি callable হয়, ব্যবহার Optimizer.minimize পেতে train_op/minimize_op
  • ব্যবহার করুন tf.keras.metrics পরিবর্তে tf.compat.v1.metrics নিরীক্ষার জন্য।

উপরের উদাহরণস্বরূপ my_model_fn , TensorFlow 2.x প্রতীক সাথে হিজরত কোড হিসাবে দেখানো হয়:

def my_model_fn(features, labels, mode):
  model = make_model()

  training = (mode == tf.estimator.ModeKeys.TRAIN)
  loss_obj = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
  predictions = model(features, training=training)

  # Get both the unconditional losses (the None part)
  # and the input-conditional losses (the features part).
  reg_losses = model.get_losses_for(None) + model.get_losses_for(features)
  total_loss=loss_obj(labels, predictions) + tf.math.add_n(reg_losses)

  # Upgrade to tf.keras.metrics.
  accuracy_obj = tf.keras.metrics.Accuracy(name='acc_obj')
  accuracy = accuracy_obj.update_state(
      y_true=labels, y_pred=tf.math.argmax(predictions, axis=1))

  train_op = None
  if training:
    # Upgrade to tf.keras.optimizers.
    optimizer = tf.keras.optimizers.Adam()
    # Manually assign tf.compat.v1.global_step variable to optimizer.iterations
    # to make tf.compat.v1.train.global_step increased correctly.
    # This assignment is a must for any `tf.train.SessionRunHook` specified in
    # estimator, as SessionRunHooks rely on global step.
    optimizer.iterations = tf.compat.v1.train.get_or_create_global_step()
    # Get both the unconditional updates (the None part)
    # and the input-conditional updates (the features part).
    update_ops = model.get_updates_for(None) + model.get_updates_for(features)
    # Compute the minimize_op.
    minimize_op = optimizer.get_updates(
        total_loss,
        model.trainable_variables)[0]
    train_op = tf.group(minimize_op, *update_ops)

  return tf.estimator.EstimatorSpec(
    mode=mode,
    predictions=predictions,
    loss=total_loss,
    train_op=train_op,
    eval_metric_ops={'Accuracy': accuracy_obj})

# Create the Estimator and train.
estimator = tf.estimator.Estimator(model_fn=my_model_fn)
tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)
INFO:tensorflow:Using default config.
INFO:tensorflow:Using default config.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpomveromc
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpomveromc
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpomveromc', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_checkpoint_save_graph_def': True, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpomveromc', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_checkpoint_save_graph_def': True, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}
INFO:tensorflow:Not using Distribute Coordinator.
INFO:tensorflow:Not using Distribute Coordinator.
INFO:tensorflow:Running training and evaluation locally (non-distributed).
INFO:tensorflow:Running training and evaluation locally (non-distributed).
INFO:tensorflow:Start train and evaluate loop. The evaluate will happen after every checkpoint. Checkpoint frequency is determined based on RunConfig arguments: save_checkpoints_steps None or save_checkpoints_secs 600.
INFO:tensorflow:Start train and evaluate loop. The evaluate will happen after every checkpoint. Checkpoint frequency is determined based on RunConfig arguments: save_checkpoints_steps None or save_checkpoints_secs 600.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
2021-07-19 23:37:53.371110: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:53.371633: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties: 
pciBusID: 0000:00:05.0 name: NVIDIA Tesla V100-SXM2-16GB computeCapability: 7.0
coreClock: 1.53GHz coreCount: 80 deviceMemorySize: 15.78GiB deviceMemoryBandwidth: 836.37GiB/s
2021-07-19 23:37:53.371845: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:53.372311: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:53.372679: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0
2021-07-19 23:37:53.372742: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1258] Device interconnect StreamExecutor with strength 1 edge matrix:
2021-07-19 23:37:53.372779: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1264]      0 
2021-07-19 23:37:53.372790: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1277] 0:   N 
2021-07-19 23:37:53.372939: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:53.373380: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:53.373693: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1418] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 14646 MB memory) -> physical GPU (device: 0, name: NVIDIA Tesla V100-SXM2-16GB, pci bus id: 0000:00:05.0, compute capability: 7.0)
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpomveromc/model.ckpt.
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpomveromc/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 2.874814, step = 0
INFO:tensorflow:loss = 2.874814, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 25...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 25...
INFO:tensorflow:Saving checkpoints for 25 into /tmp/tmpomveromc/model.ckpt.
INFO:tensorflow:Saving checkpoints for 25 into /tmp/tmpomveromc/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 25...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 25...
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2021-07-19T23:37:56
INFO:tensorflow:Starting evaluation at 2021-07-19T23:37:56
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmpomveromc/model.ckpt-25
2021-07-19 23:37:56.884303: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:56.884746: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties: 
pciBusID: 0000:00:05.0 name: NVIDIA Tesla V100-SXM2-16GB computeCapability: 7.0
coreClock: 1.53GHz coreCount: 80 deviceMemorySize: 15.78GiB deviceMemoryBandwidth: 836.37GiB/s
2021-07-19 23:37:56.884934: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:56.885330: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:56.885640: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0
2021-07-19 23:37:56.885696: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1258] Device interconnect StreamExecutor with strength 1 edge matrix:
2021-07-19 23:37:56.885711: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1264]      0 
2021-07-19 23:37:56.885720: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1277] 0:   N 
2021-07-19 23:37:56.885861: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:56.886386: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-19 23:37:56.886729: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1418] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 14646 MB memory) -> physical GPU (device: 0, name: NVIDIA Tesla V100-SXM2-16GB, pci bus id: 0000:00:05.0, compute capability: 7.0)
INFO:tensorflow:Restoring parameters from /tmp/tmpomveromc/model.ckpt-25
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [1/5]
INFO:tensorflow:Evaluation [1/5]
INFO:tensorflow:Evaluation [2/5]
INFO:tensorflow:Evaluation [2/5]
INFO:tensorflow:Evaluation [3/5]
INFO:tensorflow:Evaluation [3/5]
INFO:tensorflow:Evaluation [4/5]
INFO:tensorflow:Evaluation [4/5]
INFO:tensorflow:Evaluation [5/5]
INFO:tensorflow:Evaluation [5/5]
INFO:tensorflow:Inference Time : 1.04574s
2021-07-19 23:37:57.852422: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
INFO:tensorflow:Inference Time : 1.04574s
INFO:tensorflow:Finished evaluation at 2021-07-19-23:37:57
INFO:tensorflow:Finished evaluation at 2021-07-19-23:37:57
INFO:tensorflow:Saving dict for global step 25: Accuracy = 0.790625, global_step = 25, loss = 1.4257433
INFO:tensorflow:Saving dict for global step 25: Accuracy = 0.790625, global_step = 25, loss = 1.4257433
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 25: /tmp/tmpomveromc/model.ckpt-25
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 25: /tmp/tmpomveromc/model.ckpt-25
INFO:tensorflow:Loss for final step: 0.42627147.
2021-07-19 23:37:57.941217: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
INFO:tensorflow:Loss for final step: 0.42627147.
({'Accuracy': 0.790625, 'loss': 1.4257433, 'global_step': 25}, [])

প্রিমেড অনুমানকারী

Premade Estimators পরিবারের মধ্যে tf.estimator.DNN* , tf.estimator.Linear* এবং tf.estimator.DNNLinearCombined* এখনও TensorFlow 2.x API এ সমর্থিত। তবে কিছু যুক্তি পরিবর্তিত হয়েছে:

  1. input_layer_partitioner : v2 মধ্যে সরানো হয়েছে।
  2. loss_reduction : আপডেট করা হয়েছে tf.keras.losses.Reduction পরিবর্তে tf.compat.v1.losses.Reduction । তার ডিফল্ট মান এছাড়াও পরিবর্তিত হয় tf.keras.losses.Reduction.SUM_OVER_BATCH_SIZE থেকে tf.compat.v1.losses.Reduction.SUM
  3. optimizer , dnn_optimizer এবং linear_optimizer : এই যুক্তি আপডেট করা হয়েছে tf.keras.optimizers পরিবর্তে tf.compat.v1.train.Optimizer

উপরের পরিবর্তনগুলি স্থানান্তর করতে:

  1. কোন মাইগ্রেশন কার্যকলাপের জন্য দরকারি input_layer_partitioner যেহেতু Distribution Strategy TensorFlow 2.x. মধ্যে এটি স্বয়ংক্রিয়ভাবে হ্যান্ডেল করা হবে
  2. জন্য loss_reduction , চেক tf.keras.losses.Reduction সমর্থিত বিকল্পের জন্য।
  3. জন্য optimizer আর্গুমেন্ট:
    • যদি তা না হয়: 1) মধ্যে পাস optimizer , dnn_optimizer বা linear_optimizer 2 যুক্তি, বা) উল্লেখ optimizer হিসেবে যুক্তি string আপনার কোডে, তাহলে আপনি কারণ কিছু পরিবর্তন প্রয়োজন হবে না tf.keras.optimizers ডিফল্ট দ্বারা ব্যবহৃত হয় ।
    • অন্যথা, আপনি থেকে এটা আপডেট করা দরকার tf.compat.v1.train.Optimizer তার সংশ্লিষ্ট করার tf.keras.optimizers

চেকপয়েন্ট রূপান্তরকারী

অভিবাসনের keras.optimizers চেকপয়েন্ট ভেঙ্গে দেব TensorFlow 1.x ব্যবহার করে সংরক্ষণ যেমন tf.keras.optimizers উত্পন্ন ভেরিয়েবল একটি ভিন্ন সেট চেকপয়েন্ট সংরক্ষিত হবে। TensorFlow 2.x আপনার হিজরতের পর পুরাতন চেকপয়েন্ট পুনর্ব্যবহারযোগ্য করতে, চেষ্টা চেকপয়েন্ট কনভার্টার টুল

 curl -O https://raw.githubusercontent.com/tensorflow/estimator/master/tensorflow_estimator/python/estimator/tools/checkpoint_converter.py
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 14889  100 14889    0     0  60771      0 --:--:-- --:--:-- --:--:-- 60771

সরঞ্জামটিতে অন্তর্নির্মিত সহায়তা রয়েছে:

 python checkpoint_converter.py -h
2021-07-19 23:37:58.805973: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0
usage: checkpoint_converter.py [-h]
                               {dnn,linear,combined} source_checkpoint
                               source_graph target_checkpoint

positional arguments:
  {dnn,linear,combined}
                        The type of estimator to be converted. So far, the
                        checkpoint converter only supports Canned Estimator.
                        So the allowed types include linear, dnn and combined.
  source_checkpoint     Path to source checkpoint file to be read in.
  source_graph          Path to source graph file to be read in.
  target_checkpoint     Path to checkpoint file to be written out.

optional arguments:
  -h, --help            show this help message and exit

টেনারশ্যাপ

এই শ্রেণীর রাখা সরলীকৃত হয় int এস, পরিবর্তে tf.compat.v1.Dimension অবজেক্ট। তাই ফোন করতে কোন প্রয়োজন নেই .value একটি পেতে int

স্বতন্ত্র tf.compat.v1.Dimension বস্তু এখনও অ্যাক্সেস করা যায় tf.TensorShape.dims

নিম্নলিখিতটি টেনসরফ্লো 1.x এবং টেনসরফ্লো 2.x এর মধ্যে পার্থক্যগুলি দেখায় following

# Create a shape and choose an index
i = 0
shape = tf.TensorShape([16, None, 256])
shape
TensorShape([16, None, 256])

আপনার যদি টেনসরফ্লো 1.x এ থাকে:

value = shape[i].value

তারপরে টেনসরফ্লো ২.x এ এটি করুন:

value = shape[i]
value
16

আপনার যদি টেনসরফ্লো 1.x এ থাকে:

for dim in shape:
    value = dim.value
    print(value)

তারপরে টেনসরফ্লো ২.x এ এটি করুন:

for value in shape:
  print(value)
16
None
256

আপনার যদি টেনসরফ্লো 1.x এ থাকে (বা অন্য কোনও মাত্রা পদ্ধতি ব্যবহার করা হয়েছে):

dim = shape[i]
dim.assert_is_compatible_with(other_dim)

তারপরে টেনসরফ্লো ২.x এ এটি করুন:

other_dim = 16
Dimension = tf.compat.v1.Dimension

if shape.rank is None:
  dim = Dimension(None)
else:
  dim = shape.dims[i]
dim.is_compatible_with(other_dim) # or any other dimension method
True
shape = tf.TensorShape(None)

if shape:
  dim = shape.dims[i]
  dim.is_compatible_with(other_dim) # or any other dimension method

একটি বুলিয়ান মান tf.TensorShape হয় True যদি র্যাঙ্ক, পরিচিত হয় False অন্যথায়।

print(bool(tf.TensorShape([])))      # Scalar
print(bool(tf.TensorShape([0])))     # 0-length vector
print(bool(tf.TensorShape([1])))     # 1-length vector
print(bool(tf.TensorShape([None])))  # Unknown-length vector
print(bool(tf.TensorShape([1, 10, 100])))       # 3D tensor
print(bool(tf.TensorShape([None, None, None]))) # 3D tensor with no known dimensions
print()
print(bool(tf.TensorShape(None)))  # A tensor with unknown rank.
True
True
True
True
True
True

False

অন্যান্য পরিবর্তন

  • সরান tf.colocate_with : TensorFlow এর ডিভাইস বসানো আলগোরিদিম উল্লেখযোগ্যভাবে উন্নতি সাধন হয়েছে। এটি আর প্রয়োজন হবে না। এটি সরানোর একটি কার্যকারিতা degredation ঘটায় তাহলে একটি বাগ ফাইল করুন

  • প্রতিস্থাপন v1.ConfigProto থেকে সমতুল্য ফাংশন সঙ্গে ব্যবহার tf.config

সিদ্ধান্তে

সামগ্রিক প্রক্রিয়াটি হ'ল:

  1. আপগ্রেড স্ক্রিপ্টটি চালান।
  2. অবদানের প্রতীকগুলি সরান।
  3. আপনার মডেলগুলিকে কোনও অবজেক্ট ওরিয়েন্টেড স্টাইলে (কেরাস) স্যুইচ করুন।
  4. ব্যবহারের tf.keras বা tf.estimator প্রশিক্ষণ ও মূল্যায়ন লুপ যেখানে আপনি করতে পারেন।
  5. অন্যথায়, কাস্টম লুপগুলি ব্যবহার করুন, তবে সেশন এবং সংগ্রহগুলি এড়াতে ভুলবেন না।

কোডটিকে আইডিয়োমেটিক টেনসরফ্লো ২.x এ রূপান্তর করতে একটু কাজ লাগে তবে প্রতিটি পরিবর্তনের ফলাফল:

  • কোডের কম লাইন।
  • স্পষ্টতা এবং সরলতা বর্ধিত।
  • সহজ ডিবাগিং।