इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

डेटाफ़्रेम के रूप में TensorBoard डेटा तक पहुँचना

अवलोकन

TensorBoard की मुख्य विशेषता इसकी इंटरएक्टिव GUI है। हालाँकि, उपयोगकर्ता कभी-कभी प्रोग्राम -पोस्ट विश्लेषण और लॉग डेटा के कस्टम विज़ुअलाइज़ेशन बनाने जैसे उद्देश्यों के लिए, TensorBoard में संग्रहीत डेटा लॉग को प्रोग्रामेटिक रूप से पढ़ना चाहते हैं।

TensorBoard 2.3, इस उपयोग के मामले का समर्थन करता है, जिसमें tensorboard.data.experimental.ExperimentFromDev() । यह TensorBoard के स्केलर लॉग्स के लिए प्रोग्रामेटिक एक्सेस की अनुमति देता है। यह पृष्ठ इस नए एपीआई के मूल उपयोग को प्रदर्शित करता है।

सेट अप

क्रमादेशित एपीआई का उपयोग करने के लिए, सुनिश्चित करें कि आप tensorboard साथ pandas स्थापित करते हैं।

हम इस गाइड में कस्टम प्लॉट्स के लिए matplotlib और seaborn उपयोग करेंगे, लेकिन आप DataFrame s का विश्लेषण और कल्पना करने के लिए अपना पसंदीदा टूल चुन सकते हैं।

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

एक pandas.DataFrame रूप में pandas.DataFrame स्केल लोड हो रहा है। pandas.DataFrame

एक बार एक TensorBoard logdir TensorBoard.dev पर अपलोड कर दिया गया है, यह है कि हम क्या एक प्रयोग के रूप में उल्लेख हो जाता है। प्रत्येक प्रयोग में एक विशिष्ट आईडी होती है, जिसे प्रयोग के TensorBoard.dev URL में पाया जा सकता है। नीचे हमारे प्रदर्शन के लिए, हम एक TensorBoard.dev प्रयोग का उपयोग करेंगे: https://tensorboard.dev/experiment/c1KCv3X3QvGwaXfgX1c4tg

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

df एक pandas.DataFrame है। pandas.DataFrame जिसमें प्रयोग के सभी स्केलर लॉग हैं।

DataFrame कॉलम हैं:

  • run : प्रत्येक रन मूल logdir के एक उपनिर्देशिका से मेल खाती है। इस प्रयोग में, प्रत्येक रन दिए गए ऑप्टिमाइज़र प्रकार (एक प्रशिक्षण हाइपरपरमीटर) के साथ MNIST डेटासेट पर एक कन्वेन्शनल न्यूरल नेटवर्क (CNN) के पूर्ण प्रशिक्षण से है। इस DataFrame में कई ऐसे रन होते हैं, जो विभिन्न ऑप्टिमाइज़र प्रकारों के तहत बार-बार प्रशिक्षण रन के अनुरूप होते हैं।
  • tag : यह वर्णन करता है कि एक ही पंक्ति में value का मतलब क्या है, अर्थात, क्या मीट्रिक जो पंक्ति में प्रतिनिधित्व करता है। इस प्रयोग में, हमारे पास केवल दो अद्वितीय टैग हैं: क्रमशः सटीकता और हानि मैट्रिक्स के लिए epoch_accuracy और epoch_loss
  • step : यह एक संख्या है जो इसके रन में संबंधित पंक्ति के क्रम को दर्शाती है। यहाँ step वास्तव में युग संख्या को संदर्भित करता है। यदि आप step मानों के अतिरिक्त टाइमस्टैम्प प्राप्त करना चाहते हैं, तो आप get_scalars() कॉल करते समय कीवर्ड तर्क शामिल get_scalars() include_wall_time=True
  • value : यह ब्याज का वास्तविक संख्यात्मक मूल्य है। जैसा कि ऊपर वर्णित है, इस विशेष DataFrame में प्रत्येक value पंक्ति के 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_accuracy ) प्रत्येक रन में चरणों के एक ही सेट पर मौजूद हैं। इससे pivot=True कीवर्ड तर्क का उपयोग करके get_scalars() से सीधे "वाइड-फ़ॉर्म" DataFrame प्राप्त करना संभव हो जाता है। विस्तृत रूप वाले DataFrame में इसके सभी टैग DataFrame के कॉलम के रूप में शामिल हैं, जो इस एक सहित कुछ मामलों में काम करने के लिए अधिक सुविधाजनक है।

हालाँकि, सावधान रहें कि यदि सभी रनों में सभी टैग्स में स्टेप वैल्यूज़ के एकसमान सेट होने की शर्त पूरी नहीं हुई है, तो pivot=True का उपयोग करने से त्रुटि होगी।

 dfw = experiment.get_scalars(pivot=True) 
dfw
 

ध्यान दें कि एक एकल "मान" कॉलम के बजाय, विस्तृत-प्रपत्र DataFrame में दो कॉलम (मैट्रिक्स) शामिल हैं जैसे कि इसके कॉलम स्पष्ट रूप से: epoch_accuracy और epoch_loss

DataFrame को CSV के रूप में सहेजना

pandas.DataFrame में CSV के साथ अच्छा अंतर है। आप इसे स्थानीय CSV फ़ाइल के रूप में संग्रहीत कर सकते हैं और बाद में वापस लोड कर सकते हैं। उदाहरण के लिए:

 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() की एक अंतर्निहित विशेषता के लिए धन्यवाद, प्रत्येक वक्र भी माध्य के चारों ओर standard 1 मानक विचलन प्रदर्शित करता है, जो हमें इन वक्रों में परिवर्तनशीलता और तीन आशावादी प्रकारों के बीच अंतर के महत्व का स्पष्ट बोध कराता है। परिवर्तनशीलता के इस दृश्य का अभी तक TensorBoard के GUI में समर्थन नहीं किया गया है।

हम इस परिकल्पना का अध्ययन करना चाहते हैं कि न्यूनतम सत्यापन हानि काफी हद तक "एडैम", "आरएमएसप्रॉप" और "एसजीडी" ऑप्टिमाइज़र को हरा देती है। इसलिए हम प्रत्येक ऑप्टिमाइज़र के तहत न्यूनतम सत्यापन हानि के लिए एक डेटाफ्रेम निकालते हैं।

तब हम न्यूनतम सत्यापन नुकसान में अंतर की कल्पना करने के लिए एक बॉक्सप्लॉट बनाते हैं।

 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 के महत्व स्तर पर, हमारा विश्लेषण हमारी परिकल्पना की पुष्टि करता है कि हमारे प्रयोग में शामिल अन्य दो आशावादियों की तुलना में rmsprop अनुकूलक में न्यूनतम सत्यापन हानि काफी अधिक (यानी, बदतर) है।

संक्षेप में, यह ट्यूटोरियल एक उदाहरण प्रदान करता है कि स्केलर डेटा को panda.DataFrame रूप में कैसे एक्सेस किया जाए। TensorBoard.dev से। यह DataFrame s के साथ आपके द्वारा किए जाने वाले लचीले और शक्तिशाली विश्लेषणों और विज़ुअलाइज़ेशन को DataFrame