This page was translated by the Cloud Translation API.
Switch to English

টেনসরবোর্ড ডেটা ডেটা ফ্রেম হিসাবে অ্যাক্সেস করা হচ্ছে

সংক্ষিপ্ত বিবরণ

টেনসরবোর্ডের মূল বৈশিষ্ট্যটি এটির ইন্টারেক্টিভ জিইউআই। তবে ব্যবহারকারীরা মাঝে মধ্যে টেনসরবোর্ডে সঞ্চিত ডেটা লগগুলি প্রোগ্রামিকভাবে পড়তে চান, যেমন-পোস্ট-হক বিশ্লেষণ করা এবং লগ ডেটার কাস্টম ভিজ্যুয়ালাইজেশন তৈরি করা।

টেনসরবোর্ড ২.৩ এই ব্যবহারের ক্ষেত্রে tensorboard.data.experimental.ExperimentFromDev() . tensorboard.data.experimental.ExperimentFromDev() সমর্থন করে। এটি টেনসরবোর্ডের স্কেলার লগগুলিতে প্রোগ্রাম্যাটিক অ্যাক্সেসের অনুমতি দেয়। এই পৃষ্ঠাটি এই নতুন এপিআইয়ের প্রাথমিক ব্যবহার প্রদর্শন করে।

সেটআপ

অর্ডার কর্মসূচি এপিআই ব্যবহার করার জন্য, নিশ্চিত করুন যে আপনি ইনস্টল করতে pandas পাশাপাশি tensorboard

আমরা এই seaborn কাস্টম প্লটগুলির জন্য matplotlib এবং seaborn ব্যবহার করব, তবে আপনি DataFrame বিশ্লেষণ এবং ভিজ্যুয়ালাইজ করার জন্য আপনার পছন্দসই সরঞ্জামটি চয়ন করতে পারেন।

pip install tensorboard pandas
pip install matplotlib seaborn
 from packaging import version

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
from scipy import stats
import tensorboard as tb
 
 major_ver, minor_ver, _ = version.parse(tb.__version__).release
assert major_ver >= 2 and minor_ver >= 3, \
    "This notebook requires TensorBoard 2.3 or later."
print("TensorBoard version: ", tb.__version__)
 
TensorBoard version:  2.3.0a20200626

হিসেবে TensorBoard scalars লোড করা হচ্ছে pandas.DataFrame

একবার টেনসরবোর্ড লগডির টেনসরবোর্ড.দেভে আপলোড হয়ে গেলে, এটি আমরা পরীক্ষার হিসাবে উল্লেখ করি becomes প্রতিটি পরীক্ষার একটি অনন্য আইডি রয়েছে, যা পরীক্ষার টেনসরবোর্ড.দেব URL এ পাওয়া যাবে। নীচে আমাদের বিক্ষোভের জন্য, আমরা এখানে টেনসরবোর্ড.দেব পরীক্ষা ব্যবহার করব: https://tensorboard.dev/experiment/c1KCv3X3QvGwaXfgX1c4tg

 experiment_id = "c1KCv3X3QvGwaXfgX1c4tg"
experiment = tb.data.experimental.ExperimentFromDev(experiment_id)
df = experiment.get_scalars()
df
 

df হ'ল একটি pandas.DataFrame যা পরীক্ষার সমস্ত স্কেলার লগ ধারণ করে।

DataFrame কলামগুলি DataFrame :

  • run : প্রতিটি রান মূল লগডিরের একটি উপ-ডিরেক্টরিের সাথে সম্পর্কিত। এই পরীক্ষায়, প্রতিটি রান একটি প্রদত্ত অপ্টিমাইজার টাইপ (একটি প্রশিক্ষণ হাইপারপ্যারামিটার) সহ এমএনআইএসটি ডেটাসেটে কনভোলশনাল নিউরাল নেটওয়ার্ক (সিএনএন) এর সম্পূর্ণ প্রশিক্ষণ থেকে শুরু করে। এই DataFrame এমন একাধিক রান রয়েছে যা বিভিন্ন অপটিমাইজার ধরণের অধীনে পুনরাবৃত্তি প্রশিক্ষণের সাথে সঙ্গতিপূর্ণ।
  • tag : এটি একই সারির value অর্থ কী তা বোঝায় যে মানটি কী সারিতে প্রতিনিধিত্ব করে। এই পরীক্ষায়, আমাদের যথাযথতা এবং ক্ষতির মেট্রিক্সের জন্য যথাক্রমে দুটি মাত্র অনন্য ট্যাগ রয়েছে: epoch_accuracy এবং epoch_loss
  • step : এটি এমন একটি সংখ্যা যা এর রানের সাথে সম্পর্কিত সারির ক্রমিক ক্রম প্রতিফলিত করে। এখানে step আসলে যুগের সংখ্যা বোঝায়। আপনি যদি step মানগুলি ছাড়াও টাইমস্ট্যাম্পগুলি পেতে চান, আপনি get_scalars() কল করার সময় এই কীওয়ার্ড যুক্তিটি অন্তর্ভুক্ত_ওয়াল_টাইম include_wall_time=True ব্যবহার করতে পারেন।
  • value : এটি হ'ল আসল সংখ্যার মান। উপরে বর্ণিত হিসাবে, এই নির্দিষ্ট DataFrame প্রতিটি value DataFrame সারিটির tag উপর নির্ভর করে ক্ষতি বা যথার্থতা।
 print(df["run"].unique())
print(df["tag"].unique())
 
['adam,run_1/train' 'adam,run_1/validation' 'adam,run_2/train'
 'adam,run_2/validation' 'adam,run_3/train' 'adam,run_3/validation'
 'adam,run_4/train' 'adam,run_4/validation' 'adam,run_5/train'
 'adam,run_5/validation' 'rmsprop,run_1/train' 'rmsprop,run_1/validation'
 'rmsprop,run_2/train' 'rmsprop,run_2/validation' 'rmsprop,run_3/train'
 'rmsprop,run_3/validation' 'rmsprop,run_4/train'
 'rmsprop,run_4/validation' 'rmsprop,run_5/train'
 'rmsprop,run_5/validation' 'sgd,run_1/train' 'sgd,run_1/validation'
 'sgd,run_2/train' 'sgd,run_2/validation' 'sgd,run_3/train'
 'sgd,run_3/validation' 'sgd,run_4/train' 'sgd,run_4/validation'
 'sgd,run_5/train' 'sgd,run_5/validation']
['epoch_accuracy' 'epoch_loss']

একটি পাইভোটেড (প্রশস্ত-রূপ) ডেটা ফ্রেম পাচ্ছেন

আমাদের পরীক্ষায়, দুটি epoch_loss ( epoch_loss এবং epoch_accuracy ) প্রতিটি রানের একই ধাপে উপস্থিত রয়েছে। এটি pivot=True কীওয়ার্ড আর্গুমেন্ট ব্যবহার করে get_scalars() থেকে সরাসরি একটি "প্রশস্ত-রূপ" DataFrame অর্জন করা সম্ভব করে। ওয়াইড-ফর্ম DataFrame এর সমস্ত ট্যাগ ডেটাফ্রেমের কলাম হিসাবে অন্তর্ভুক্ত রয়েছে, যা এটি সহ কয়েকটি ক্ষেত্রে কাজ করা আরও সুবিধাজনক।

তবে, সাবধান হন যে সমস্ত রানে সমস্ত ট্যাগ জুড়ে ধাপের মানগুলির অভিন্ন সেট করার শর্তটি পূরণ না করা হলে, pivot=True ব্যবহার করে ত্রুটি হবে।

 dfw = experiment.get_scalars(pivot=True) 
dfw
 

লক্ষ্য করুন যে একটি একক "মান" কলামের পরিবর্তে, প্রশস্ত-ফর্ম ডেটাফ্রেমে এর কলামগুলি স্বতন্ত্রভাবে দুটি ট্যাগ (মেট্রিক) অন্তর্ভুক্ত করেছে: epoch_accuracy এবং epoch_loss

CSF হিসাবে ডেটা ফ্রেম সংরক্ষণ করা

pandas.DataFrame সিএসভি-র সাথে ভাল আন্তঃক্রিয়াশীলতা রয়েছে। আপনি এটিকে স্থানীয় সিএসভি ফাইল হিসাবে সঞ্চয় করতে পারেন এবং এটি আবার লোড করতে পারেন। উদাহরণ স্বরূপ:

 csv_path = '/tmp/tb_experiment_1.csv'
dfw.to_csv(csv_path, index=False)
dfw_roundtrip = pd.read_csv(csv_path)
pd.testing.assert_frame_equal(dfw_roundtrip, dfw)
 

কাস্টম ভিজুয়ালাইজেশন এবং পরিসংখ্যান বিশ্লেষণ সম্পাদন করা

 # Filter the DataFrame to only validation data, which is what the subsequent
# analyses and visualization will be focused on.
dfw_validation = dfw[dfw.run.str.endswith("/validation")]
# Get the optimizer value for each row of the validation DataFrame.
optimizer_validation = dfw_validation.run.apply(lambda run: run.split(",")[0])

plt.figure(figsize=(16, 6))
plt.subplot(1, 2, 1)
sns.lineplot(data=dfw_validation, x="step", y="epoch_accuracy",
             hue=optimizer_validation).set_title("accuracy")
plt.subplot(1, 2, 2)
sns.lineplot(data=dfw_validation, x="step", y="epoch_loss",
             hue=optimizer_validation).set_title("loss")
 
Text(0.5, 1.0, 'loss')

PNG

উপরের প্লটগুলি বৈধতা যথার্থতা এবং বৈধতা হ্রাসের টাইমকোর্সগুলি দেখায়। প্রতিটি বক্ররেখা একটি অপ্টিমাইজার ধরণের অধীনে গড়ে 5 রান জুড়ে দেখায়। seaborn.lineplot() এর seaborn.lineplot() বৈশিষ্ট্যটির জন্য ধন্যবাদ, প্রতিটি বক্ররেখাটিও প্রায় চারপাশে standard 1 স্ট্যান্ডার্ড বিচ্যুতি প্রদর্শন করে, যা আমাদের এই বক্ররেখাগুলির পরিবর্তনশীলতার একটি স্পষ্ট ধারণা দেয় এবং তিনটি অপ্টিমাইজার প্রকারের মধ্যে পার্থক্যের তাত্পর্য দেয়। পরিবর্তনশীলতার এই ভিজ্যুয়ালাইজেশন এখনও টেনসরবোর্ডের জিইউআই সমর্থিত নয়।

আমরা এই অনুমানটি অধ্যয়ন করতে চাই যে ন্যূনতম বৈধতা হ্রাস "অ্যাডাম", "আরএমএসপ্রপ" এবং "এসজিডি" অপটিমাইজারের তুলনায় উল্লেখযোগ্যভাবে পৃথক। সুতরাং আমরা প্রতিটি অপ্টিমাইজারের অধীনে ন্যূনতম বৈধতা হ্রাসের জন্য একটি ডেটা ফ্রেম বের করি।

তারপরে আমরা ন্যূনতম বৈধতা ক্ষতির পার্থক্যটি দেখতে একটি বক্সপ্লট তৈরি করি।

 adam_min_val_loss = dfw_validation.loc[optimizer_validation=="adam", :].groupby(
    "run", as_index=False).agg({"epoch_loss": "min"})
rmsprop_min_val_loss = dfw_validation.loc[optimizer_validation=="rmsprop", :].groupby(
    "run", as_index=False).agg({"epoch_loss": "min"})
sgd_min_val_loss = dfw_validation.loc[optimizer_validation=="sgd", :].groupby(
    "run", as_index=False).agg({"epoch_loss": "min"})
min_val_loss = pd.concat([adam_min_val_loss, rmsprop_min_val_loss, sgd_min_val_loss])

sns.boxplot(data=min_val_loss, y="epoch_loss",
            x=min_val_loss.run.apply(lambda run: run.split(",")[0]))
 
<matplotlib.axes._subplots.AxesSubplot at 0x7f5e017c8150>

PNG

 # Perform pairwise comparisons between the minimum validation losses
# from the three optimizers.
_, p_adam_vs_rmsprop = stats.ttest_ind(
    adam_min_val_loss["epoch_loss"],
    rmsprop_min_val_loss["epoch_loss"]) 
_, p_adam_vs_sgd = stats.ttest_ind(
    adam_min_val_loss["epoch_loss"],
    sgd_min_val_loss["epoch_loss"]) 
_, p_rmsprop_vs_sgd = stats.ttest_ind(
    rmsprop_min_val_loss["epoch_loss"],
    sgd_min_val_loss["epoch_loss"]) 
print("adam vs. rmsprop: p = %.4f" % p_adam_vs_rmsprop)
print("adam vs. sgd: p = %.4f" % p_adam_vs_sgd)
print("rmsprop vs. sgd: p = %.4f" % p_rmsprop_vs_sgd)
 
adam vs. rmsprop: p = 0.0244
adam vs. sgd: p = 0.9749
rmsprop vs. sgd: p = 0.0135

অতএব, 0.05 এর একটি তাত্পর্য পর্যায়ে, আমাদের বিশ্লেষণটি আমাদের অনুমানটিকে নিশ্চিত করে যে আমাদের পরীক্ষায় অন্তর্ভুক্ত অন্যান্য দুটি অপ্টিমাইজারের তুলনায় ন্যূনতম বৈধতা হ্রাস আরএমএসপ্রপ অপ্টিমাইজারের তুলনায় উল্লেখযোগ্যভাবে বেশি (যেমন, আরও খারাপ) is

সংক্ষেপে, এই টিউটোরিয়ালটি কীভাবে স্ক্যানার ডেটা panda.DataFrame হিসাবে ডেটা অ্যাক্সেস করতে পারে তার একটি উদাহরণ সরবরাহ করে। টেনসরবোর্ড.দেব থেকে ডেটা panda.DataFrame s এটি DataFrame এর সাথে আপনি যে ধরনের নমনীয় এবং শক্তিশালী বিশ্লেষণ এবং ভিজ্যুয়ালাইজেশন করতে পারেন তা প্রদর্শন করে।