mirror of
https://github.com/redoules/redoules.github.io.git
synced 2025-12-12 15:59:34 +00:00
509 lines
34 KiB
HTML
509 lines
34 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
|
|
<meta name="description" content="Data Science for Political and Social Phenomena">
|
|
<meta name="author" content="Guillaume Redoulès">
|
|
<link rel="icon" href="../favicon.ico">
|
|
|
|
<title>Showing progress - Python</title>
|
|
|
|
<!-- JQuery -->
|
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
|
|
<script>
|
|
window.jQuery || document.write('<script src="../theme/js/jquery.min.js"><\/script>')
|
|
</script>
|
|
|
|
<!-- Bootstrap core CSS -->
|
|
<link rel="stylesheet" href="../theme/css/bootstrap.css" />
|
|
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
|
|
<link rel="stylesheet" type="text/css" href="../theme/css/ie10-viewport-bug-workaround.css" />
|
|
<!-- Custom styles for this template -->
|
|
<link rel="stylesheet" type="text/css" href="../theme/css/style.css" />
|
|
<link rel="stylesheet" type="text/css" href="../theme/css/notebooks.css" />
|
|
<link href='https://fonts.googleapis.com/css?family=PT+Serif:400,700|Roboto:400,500,700' rel='stylesheet' type='text/css'>
|
|
|
|
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
|
<!--[if lt IE 9]>
|
|
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
|
|
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
|
<![endif]-->
|
|
|
|
|
|
<meta name="tags" content="Basics" />
|
|
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div class="navbar navbar-fixed-top">
|
|
<div class="container">
|
|
<div class="navbar-header">
|
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
</button>
|
|
<a class="navbar-brand" href="..">Guillaume Redoulès</a>
|
|
</div>
|
|
<div class="navbar-collapse collapse" id="searchbar">
|
|
|
|
<ul class="nav navbar-nav navbar-right">
|
|
<li class="dropdown">
|
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">About<span class="caret"></span></a>
|
|
<ul class="dropdown-menu">
|
|
<li><a href="../pages/about.html">About Guillaume</a></li>
|
|
<li><a href="https://github.com/redoules">GitHub</a></li>
|
|
<li><a href="https://www.linkedin.com/in/guillaume-redoul%C3%A8s-33923860/">LinkedIn</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="dropdown">
|
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Data Science<span class="caret"></span></a>
|
|
<ul class="dropdown-menu">
|
|
<li><a href="..#Blog">Blog</a></li>
|
|
<li><a href="..#Python">Python</a></li>
|
|
<li><a href="..#Bash">Bash</a></li>
|
|
<li><a href="..#SQL">SQL</a></li>
|
|
<li><a href="..#Mathematics">Mathematics</a></li>
|
|
<li><a href="..#Machine_Learning">Machine Learning</a></li>
|
|
<li><a href="..#Projects">Projects</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="dropdown">
|
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Projects<span class="caret"></span></a>
|
|
<ul class="dropdown-menu">
|
|
<li><a href="https://github.com/redoules/redoules.github.io">Notes (Github)</a></li>
|
|
</ul>
|
|
</li>
|
|
|
|
<!--<li class="dropdown">
|
|
<a href="../feeds/blog.rss.xml">Blog RSS</a>
|
|
</li>-->
|
|
|
|
|
|
</ul>
|
|
|
|
<form class="navbar-form" action="../search.html" onsubmit="return validateForm(this.elements['q'].value);">
|
|
<div class="form-group" style="display:inline;">
|
|
<div class="input-group" style="display:table;">
|
|
<span class="input-group-addon" style="width:1%;"><span class="glyphicon glyphicon-search"></span></span>
|
|
<input class="form-control search-query" name="q" id="tipue_search_input" placeholder="e.g. scikit KNN, pandas merge" required autocomplete="off" type="text">
|
|
</div>
|
|
</div>
|
|
</form>
|
|
|
|
</div>
|
|
<!--/.nav-collapse -->
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<!-- end of header section -->
|
|
<div class="container">
|
|
<!-- <div class="alert alert-warning" role="alert">
|
|
Did you find this page useful? Please do me a quick favor and <a href="#" class="alert-link">endorse me for data science on LinkedIn</a>.
|
|
</div> -->
|
|
<section id="content" class="body">
|
|
<header>
|
|
<h1>
|
|
Showing progress
|
|
</h1>
|
|
<ol class="breadcrumb">
|
|
<li>
|
|
<time class="published" datetime="2019-12-07T20:17:00+01:00">
|
|
07 décembre 2019
|
|
</time>
|
|
</li>
|
|
<li>Python</li>
|
|
<li>Basics</li>
|
|
</ol>
|
|
</header>
|
|
<div class='article_content'>
|
|
<p>It is a small and very popular progress meter. It is easy to use, fast (<100ns per iteration overhead), has an intelligent estimated time remaining, works nearly everywhere and is dependency-free.</p>
|
|
<p>A minimal example is :</p>
|
|
<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">tqdm</span> <span class="kn">import</span> <span class="n">tqdm</span>
|
|
<span class="kn">from</span> <span class="nn">time</span> <span class="kn">import</span> <span class="n">sleep</span>
|
|
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">tqdm</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">)):</span>
|
|
<span class="n">sleep</span><span class="p">(</span><span class="mf">0.01</span><span class="p">)</span>
|
|
</pre></div>
|
|
|
|
|
|
<div class="highlight"><pre><span></span><span class="err">100%|██████████| 100/100 [00:01<00:00, 98.57it/s]</span>
|
|
</pre></div>
|
|
|
|
|
|
<p>It works basically everywhere :
|
|
* in the notebook
|
|
* in the console
|
|
* on MacOS
|
|
* on Linux
|
|
* on Windows</p>
|
|
<p>The <code>trange(N)</code> is a convinience function that can be used as a shortcut for <code>tqdm(range(N))</code></p>
|
|
<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">tqdm</span> <span class="kn">import</span> <span class="n">trange</span>
|
|
<span class="kn">from</span> <span class="nn">time</span> <span class="kn">import</span> <span class="n">sleep</span>
|
|
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">trange</span><span class="p">(</span><span class="mi">100</span><span class="p">):</span>
|
|
<span class="n">sleep</span><span class="p">(</span><span class="mf">0.01</span><span class="p">)</span>
|
|
</pre></div>
|
|
|
|
|
|
<div class="highlight"><pre><span></span><span class="err">100%|██████████| 100/100 [00:01<00:00, 98.31it/s]</span>
|
|
</pre></div>
|
|
|
|
|
|
<p>You can add a description and units to the progress bar</p>
|
|
<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">tqdm</span> <span class="kn">import</span> <span class="n">trange</span>
|
|
<span class="kn">from</span> <span class="nn">time</span> <span class="kn">import</span> <span class="n">sleep</span>
|
|
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">trange</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="s1">'my progress bar'</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="s2">"epoch"</span><span class="p">):</span>
|
|
<span class="n">sleep</span><span class="p">(</span><span class="mf">0.01</span><span class="p">)</span>
|
|
</pre></div>
|
|
|
|
|
|
<div class="highlight"><pre><span></span><span class="err">my progress bar: 100%|██████████| 100/100 [00:01<00:00, 98.77epoch/s]</span>
|
|
</pre></div>
|
|
|
|
|
|
<p>tqdm can be used outside of python, for example in a pipe in order to show the progress</p>
|
|
<div class="highlight"><pre><span></span><span class="err">!</span><span class="n">seq</span> <span class="mi">999999</span> <span class="o">|</span> <span class="n">python</span> <span class="o">-</span><span class="n">m</span> <span class="n">tqdm</span> <span class="o">|</span> <span class="n">wc</span> <span class="o">-</span><span class="n">l</span>
|
|
</pre></div>
|
|
|
|
|
|
<div class="highlight"><pre><span></span><span class="err">999999it [00:00, 2908577.61it/s]</span>
|
|
<span class="err">999999</span>
|
|
</pre></div>
|
|
|
|
|
|
<p>or the number of bytes per second</p>
|
|
<div class="highlight"><pre><span></span><span class="err">!</span><span class="n">seq</span> <span class="mi">999999</span> <span class="o">|</span> <span class="n">python</span> <span class="o">-</span><span class="n">m</span> <span class="n">tqdm</span> <span class="o">--</span><span class="nb">bytes</span> <span class="o">|</span> <span class="n">wc</span> <span class="o">-</span><span class="n">l</span>
|
|
</pre></div>
|
|
|
|
|
|
<div class="highlight"><pre><span></span><span class="err">6.57MB [00:00, 232MB/s]</span>
|
|
<span class="err">999999</span>
|
|
</pre></div>
|
|
|
|
|
|
<p>we can also have a progress bar if we specify a total</p>
|
|
<div class="highlight"><pre><span></span><span class="err">!</span><span class="n">seq</span> <span class="mi">999999</span> <span class="o">|</span> <span class="n">python</span> <span class="o">-</span><span class="n">m</span> <span class="n">tqdm</span> <span class="o">--</span><span class="nb">bytes</span> <span class="o">--</span><span class="n">total</span> <span class="mi">7628000</span><span class="o">|</span> <span class="n">wc</span> <span class="o">-</span><span class="n">l</span>
|
|
</pre></div>
|
|
|
|
|
|
<div class="highlight"><pre><span></span><span class="err"> 90%|███████████████████████████████████▏ | 6.57M/7.27M [00:00<00:00, 225MB/s]</span>
|
|
<span class="err">999999</span>
|
|
</pre></div>
|
|
|
|
|
|
<h3>Iterable-based use</h3>
|
|
<p>Wrap <code>tqdm()</code> around any iterable (i.e. list, numpy array, pandas dataframe, etc.)</p>
|
|
<div class="highlight"><pre><span></span><span class="n">text</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">tqdm</span><span class="p">([</span><span class="s2">"a"</span><span class="p">,</span> <span class="s2">"b"</span><span class="p">,</span> <span class="s2">"c"</span><span class="p">,</span><span class="s2">"d"</span><span class="p">]):</span>
|
|
<span class="n">sleep</span><span class="p">(</span><span class="mf">0.25</span><span class="p">)</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="n">text</span> <span class="o">+</span> <span class="n">c</span>
|
|
</pre></div>
|
|
|
|
|
|
<div class="highlight"><pre><span></span><span class="err">100%|██████████| 4/4 [00:01<00:00, 3.98it/s]</span>
|
|
</pre></div>
|
|
|
|
|
|
<p>The progress bar can be instantiated outside of the loop</p>
|
|
<div class="highlight"><pre><span></span><span class="n">pbar</span> <span class="o">=</span> <span class="n">tqdm</span><span class="p">([</span><span class="s2">"a"</span><span class="p">,</span> <span class="s2">"b"</span><span class="p">,</span> <span class="s2">"c"</span><span class="p">,</span><span class="s2">"d"</span><span class="p">])</span>
|
|
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">pbar</span><span class="p">:</span>
|
|
<span class="n">sleep</span><span class="p">(</span><span class="mf">0.25</span><span class="p">)</span>
|
|
<span class="n">pbar</span><span class="o">.</span><span class="n">set_description</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Processing </span><span class="si">{</span><span class="n">c</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
</pre></div>
|
|
|
|
|
|
<div class="highlight"><pre><span></span><span class="k">Proc</span><span class="nb">essi</span><span class="nv">ng</span> <span class="nv">d</span><span class="p">:</span> <span class="mi">100</span><span class="o">%|</span><span class="err">██████████</span><span class="o">|</span> <span class="mi">4</span><span class="o">/</span><span class="mi">4</span> <span class="p">[</span><span class="mi">00</span><span class="p">:</span><span class="mi">01</span><span class="o"><</span><span class="mi">00</span><span class="p">:</span><span class="mi">00</span><span class="p">,</span> <span class="mf">3.98</span><span class="nv">it</span><span class="o">/</span><span class="nv">s</span><span class="p">]</span>
|
|
</pre></div>
|
|
|
|
|
|
<h3>Manual</h3>
|
|
<p>tqdm can be manually controled by using a <code>with</code> statement. If you specify a <code>total</code> (or an iterable with <code>len()</code>), predictive stats are displayed.</p>
|
|
<div class="highlight"><pre><span></span><span class="k">with</span> <span class="n">tqdm</span><span class="p">(</span><span class="n">total</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span> <span class="k">as</span> <span class="n">pbar</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">):</span>
|
|
<span class="n">sleep</span><span class="p">(</span><span class="mf">0.1</span><span class="p">)</span>
|
|
<span class="n">pbar</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
|
|
</pre></div>
|
|
|
|
|
|
<div class="highlight"><pre><span></span><span class="err">100%|██████████| 100/100 [00:01<00:00, 99.08it/s]</span>
|
|
</pre></div>
|
|
|
|
|
|
<h3>Desciption and additional stats</h3>
|
|
<p>Custom information can be displayed and updated dynamically on tqdm bars with the <code>desc</code> and <code>postfix</code> arguments.</p>
|
|
<p>This can be useful for machine learning where we want to print the metrics or losses during the training process.</p>
|
|
<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">tqdm</span> <span class="kn">import</span> <span class="n">trange</span>
|
|
<span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">random</span><span class="p">,</span> <span class="n">randint</span>
|
|
<span class="kn">from</span> <span class="nn">time</span> <span class="kn">import</span> <span class="n">sleep</span>
|
|
|
|
<span class="k">with</span> <span class="n">trange</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="k">as</span> <span class="n">t</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">t</span><span class="p">:</span>
|
|
<span class="n">t</span><span class="o">.</span><span class="n">set_description</span><span class="p">(</span><span class="sa">f</span><span class="s2">"GEN </span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="n">t</span><span class="o">.</span><span class="n">set_postfix</span><span class="p">(</span><span class="n">loss</span><span class="o">=</span><span class="n">random</span><span class="p">(),</span> <span class="n">gen</span><span class="o">=</span><span class="n">randint</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">999</span><span class="p">),</span> <span class="nb">str</span><span class="o">=</span><span class="s2">"h"</span><span class="p">,</span> <span class="n">lst</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">])</span>
|
|
<span class="n">sleep</span><span class="p">(</span><span class="mf">0.1</span><span class="p">)</span>
|
|
</pre></div>
|
|
|
|
|
|
<div class="highlight"><pre><span></span><span class="err">GEN 9: 100%|██████████| 10/10 [00:01<00:00, 9.80it/s, gen=927, loss=0.505, lst=[1, 2], str=h]</span>
|
|
</pre></div>
|
|
|
|
|
|
<p>You can customise what your bar looks like with the <code>bar_format</code> option.</p>
|
|
<div class="highlight"><pre><span></span><span class="k">with</span> <span class="n">tqdm</span><span class="p">(</span><span class="n">total</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">bar_format</span><span class="o">=</span><span class="s2">"</span><span class="si">{postfix[0]}</span><span class="s2"> </span><span class="si">{postfix[1][value]:>8.2g}</span><span class="s2">"</span><span class="p">,</span> <span class="n">postfix</span><span class="o">=</span><span class="p">[</span><span class="s2">"Batch"</span><span class="p">,</span> <span class="nb">dict</span><span class="p">(</span><span class="n">value</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)])</span> <span class="k">as</span> <span class="n">t</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">):</span>
|
|
<span class="n">sleep</span><span class="p">(</span><span class="mf">0.1</span><span class="p">)</span>
|
|
<span class="n">t</span><span class="o">.</span><span class="n">postfix</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s2">"value"</span><span class="p">]</span> <span class="o">=</span> <span class="n">i</span><span class="o">/</span><span class="mi">2</span>
|
|
<span class="n">t</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
|
|
</pre></div>
|
|
|
|
|
|
<div class="highlight"><pre><span></span><span class="err">Batch 4.5</span>
|
|
</pre></div>
|
|
|
|
|
|
<h3>Hooks and callbacks</h3>
|
|
<p>tqdm can be integrated with other libaries. In the example, we integrate tqdm with urllib</p>
|
|
<p>In order to download a file in python we use the following code but it doesn't show any progress.</p>
|
|
<div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">urllib.request</span><span class="o">,</span> <span class="nn">os</span>
|
|
|
|
<span class="n">eg_link</span> <span class="o">=</span> <span class="s2">"http://mirrors.melbourne.co.uk/ubuntu-releases/19.10/ubuntu-19.10-desktop-amd64.iso"</span>
|
|
|
|
<span class="n">urllib</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">urlretrieve</span><span class="p">(</span><span class="n">eg_link</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">devnull</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
|
</pre></div>
|
|
|
|
|
|
<p>We can create a class called TqdmUpTo to show the progress. It is recommended to use <code>miniters=1</code> whenever there is a potentially large difference in iteration speed (e.g. downloading a file over a patchy connection).</p>
|
|
<p>tqdm expect a call to <code>update</code> and urllib needs an <code>update_to</code> method</p>
|
|
<div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">TqdmUpTo</span><span class="p">(</span><span class="n">tqdm</span><span class="p">):</span>
|
|
<span class="k">def</span> <span class="nf">update_to</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">blocks_so_far</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">block_size</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">total</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">total</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">total</span> <span class="o">=</span> <span class="n">total</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">blocks_so_far</span> <span class="o">*</span> <span class="n">block_size</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">n</span><span class="p">)</span>
|
|
</pre></div>
|
|
|
|
|
|
<div class="highlight"><pre><span></span><span class="k">with</span> <span class="n">TqdmUpTo</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="s1">'B'</span><span class="p">,</span> <span class="n">unit_scale</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">miniters</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">eg_link</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> <span class="k">as</span> <span class="n">t</span><span class="p">:</span>
|
|
<span class="n">urllib</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">urlretrieve</span><span class="p">(</span><span class="n">eg_link</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">devnull</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">reporthook</span><span class="o">=</span><span class="n">t</span><span class="o">.</span><span class="n">update_to</span><span class="p">)</span>
|
|
</pre></div>
|
|
|
|
|
|
<div class="highlight"><pre><span></span><span class="err">ubuntu-19.10-desktop-amd64.iso: 0%| | 4.38M/2.46G [00:06<56:58, 720kB/s]</span>
|
|
</pre></div>
|
|
|
|
|
|
<p>The hooks can be useful for dispalying the progress of training a neural network with keras</p>
|
|
<div class="highlight"><pre><span></span><span class="k">with</span> <span class="n">tqdm</span><span class="p">(</span><span class="n">total</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="s2">"epoch"</span><span class="p">)</span> <span class="k">as</span> <span class="n">t</span><span class="p">:</span>
|
|
<span class="k">def</span> <span class="nf">cbk</span><span class="p">(</span><span class="n">epoch</span><span class="p">,</span> <span class="n">logs</span><span class="p">):</span>
|
|
<span class="n">t</span><span class="o">.</span><span class="n">set_postfix</span><span class="p">(</span><span class="n">logs</span><span class="p">,</span> <span class="n">refresh</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
|
<span class="n">t</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
|
|
<span class="n">cbkWrapped</span> <span class="o">=</span> <span class="n">keras</span><span class="o">.</span><span class="n">callbacks</span><span class="o">.</span><span class="n">LambdaCallback</span><span class="p">(</span><span class="n">on_epoch_end</span><span class="o">=</span><span class="n">cbk</span><span class="p">)</span>
|
|
|
|
<span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">epochs</span><span class="o">=</span><span class="n">t</span><span class="o">.</span><span class="n">total</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">callbacks</span><span class="o">=</span><span class="p">[</span><span class="n">cbkWrapped</span><span class="p">])</span>
|
|
</pre></div>
|
|
|
|
|
|
<div class="highlight"><pre><span></span> <span class="mi">0</span><span class="o">%|</span> <span class="o">|</span> <span class="mi">0</span><span class="o">/</span><span class="mi">10</span> <span class="p">[</span><span class="mi">00</span><span class="o">:</span><span class="mi">00</span><span class="cp"><?</span><span class="p">,</span> <span class="o">?</span><span class="nx">epoch</span><span class="o">/</span><span class="nx">s</span><span class="p">]</span>
|
|
</pre></div>
|
|
|
|
|
|
<p>tqdm can also be applyied to pandas</p>
|
|
<div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
|
|
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
|
<span class="kn">from</span> <span class="nn">tqdm</span> <span class="kn">import</span> <span class="n">tqdm</span>
|
|
|
|
<span class="n">df</span><span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">rand</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">10</span><span class="p">))</span>
|
|
<span class="c1">#Registed `pandas.progress_apply`, `pandas.Series.map_apply`, etc with tqdm</span>
|
|
<span class="c1">#tqdm_gui, tqdm_notebook, optional kwargs can be used</span>
|
|
<span class="n">tqdm</span><span class="o">.</span><span class="n">pandas</span><span class="p">(</span><span class="n">desc</span><span class="o">=</span><span class="s2">"my bar!"</span><span class="p">)</span>
|
|
|
|
<span class="c1">#replace apply by progress_apply or map by progress_map</span>
|
|
<span class="n">df</span><span class="o">.</span><span class="n">progress_apply</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span><span class="n">x</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span>
|
|
</pre></div>
|
|
|
|
|
|
<div class="highlight"><pre><span></span><span class="o">/</span><span class="n">home</span><span class="o">/</span><span class="n">guillaume</span><span class="o">/</span><span class="n">anaconda3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">python3</span><span class="o">.</span><span class="mi">7</span><span class="o">/</span><span class="n">site</span><span class="o">-</span><span class="n">packages</span><span class="o">/</span><span class="n">tqdm</span><span class="o">/</span><span class="n">std</span><span class="o">.</span><span class="n">py</span><span class="p">:</span><span class="mi">654</span><span class="p">:</span> <span class="ne">FutureWarning</span><span class="p">:</span> <span class="n">The</span> <span class="n">Panel</span> <span class="k">class</span> <span class="nc">is</span> <span class="n">removed</span> <span class="kn">from</span> <span class="nn">pandas.</span> <span class="nn">Accessing</span> <span class="nn">it</span> <span class="nn">from</span> <span class="nn">the</span> <span class="nn">top</span><span class="o">-</span><span class="n">level</span> <span class="n">namespace</span> <span class="n">will</span> <span class="n">also</span> <span class="n">be</span> <span class="n">removed</span> <span class="ow">in</span> <span class="n">the</span> <span class="nb">next</span> <span class="n">version</span>
|
|
<span class="kn">from</span> <span class="nn">pandas</span> <span class="kn">import</span> <span class="n">Panel</span>
|
|
<span class="n">my</span> <span class="n">bar</span><span class="err">!</span><span class="p">:</span> <span class="mi">100</span><span class="o">%|</span><span class="err">██████████</span><span class="o">|</span> <span class="mi">10</span><span class="o">/</span><span class="mi">10</span> <span class="p">[</span><span class="mo">00</span><span class="p">:</span><span class="mo">00</span><span class="o"><</span><span class="mo">00</span><span class="p">:</span><span class="mo">00</span><span class="p">,</span> <span class="mf">818.46</span><span class="n">it</span><span class="o">/</span><span class="n">s</span><span class="p">]</span>
|
|
</pre></div>
|
|
|
|
|
|
<div>
|
|
<style scoped>
|
|
.dataframe tbody tr th:only-of-type {
|
|
vertical-align: middle;
|
|
}
|
|
|
|
.dataframe tbody tr th {
|
|
vertical-align: top;
|
|
}
|
|
|
|
.dataframe thead th {
|
|
text-align: right;
|
|
}
|
|
</style>
|
|
<table border="1" class="dataframe">
|
|
<thead>
|
|
<tr style="text-align: right;">
|
|
<th></th>
|
|
<th>0</th>
|
|
<th>1</th>
|
|
<th>2</th>
|
|
<th>3</th>
|
|
<th>4</th>
|
|
<th>5</th>
|
|
<th>6</th>
|
|
<th>7</th>
|
|
<th>8</th>
|
|
<th>9</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<th>0</th>
|
|
<td>0.072067</td>
|
|
<td>0.192319</td>
|
|
<td>0.354137</td>
|
|
<td>0.226678</td>
|
|
<td>0.092123</td>
|
|
<td>0.003836</td>
|
|
<td>0.190529</td>
|
|
<td>0.129519</td>
|
|
<td>0.272106</td>
|
|
<td>0.918287</td>
|
|
</tr>
|
|
<tr>
|
|
<th>1</th>
|
|
<td>0.048068</td>
|
|
<td>0.157399</td>
|
|
<td>0.047842</td>
|
|
<td>0.024008</td>
|
|
<td>0.029614</td>
|
|
<td>0.067597</td>
|
|
<td>0.891104</td>
|
|
<td>0.909314</td>
|
|
<td>0.000385</td>
|
|
<td>0.090840</td>
|
|
</tr>
|
|
<tr>
|
|
<th>2</th>
|
|
<td>0.965366</td>
|
|
<td>0.000364</td>
|
|
<td>0.159109</td>
|
|
<td>0.550288</td>
|
|
<td>0.494446</td>
|
|
<td>0.157180</td>
|
|
<td>0.113372</td>
|
|
<td>0.427566</td>
|
|
<td>0.086719</td>
|
|
<td>0.004057</td>
|
|
</tr>
|
|
<tr>
|
|
<th>3</th>
|
|
<td>0.323191</td>
|
|
<td>0.524031</td>
|
|
<td>0.000673</td>
|
|
<td>0.037876</td>
|
|
<td>0.274079</td>
|
|
<td>0.036120</td>
|
|
<td>0.479730</td>
|
|
<td>0.095726</td>
|
|
<td>0.085360</td>
|
|
<td>0.006432</td>
|
|
</tr>
|
|
<tr>
|
|
<th>4</th>
|
|
<td>0.707128</td>
|
|
<td>0.041636</td>
|
|
<td>0.339444</td>
|
|
<td>0.105327</td>
|
|
<td>0.111249</td>
|
|
<td>0.331656</td>
|
|
<td>0.172311</td>
|
|
<td>0.940055</td>
|
|
<td>0.003604</td>
|
|
<td>0.463608</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<h3>Notebook integration</h3>
|
|
<p>Use tnrange via the tqdm_notebook submodule</p>
|
|
<p>```python
|
|
from tqdm import tnrange, tqdm_notebook
|
|
from time import sleep</p>
|
|
<p>for i in tnrange(3, desc="1st loop"):
|
|
for j in tqdm_notebook(range(100), desc="2nd loop"):
|
|
sleep(0.01)</p>
|
|
<p>If you are not sure if your users are using a notebook or a console you can use tqdm.auto</p>
|
|
<p>```python
|
|
from tqdm.auto import tqdm
|
|
tqdm.pandas()</p>
|
|
</div>
|
|
<aside>
|
|
<div class="bug-reporting__panel">
|
|
<h3>Find an error or bug? Have a suggestion?</h3>
|
|
<p>Everything on this site is avaliable on GitHub. Head on over and <a href='https://github.com/redoules/redoules.github.io/issues/new'>submit an issue.</a> You can also message me directly by <a href='mailto:guillaume.redoules@gadz.org'>email</a>.</p>
|
|
</div>
|
|
</aside>
|
|
</section>
|
|
|
|
</div>
|
|
<!-- start of footer section -->
|
|
<footer class="footer">
|
|
<div class="container">
|
|
<p class="text-muted">
|
|
<center>This project contains 119 pages and is available on <a href="https://github.com/redoules/redoules.github.io">GitHub</a>.
|
|
<br/>
|
|
Copyright © Guillaume Redoulès,
|
|
<time datetime="2018">2018</time>.
|
|
</center>
|
|
</p>
|
|
</div>
|
|
</footer>
|
|
|
|
<!-- This jQuery line finds any span that contains code highlighting classes and then selects the parent <pre> tag and adds a border. This is done as a workaround to visually distinguish the code inputs and outputs -->
|
|
<script>
|
|
$( ".hll, .n, .c, .err, .k, .o, .cm, .cp, .c1, .cs, .gd, .ge, .gr, .gh, .gi, .go, .gp, .gs, .gu, .gt, .kc, .kd, .kn, .kp, .kr, .kt, .m, .s, .na, .nb, .nc, .no, .nd, .ni, .ne, .nf, .nl, .nn, .nt, .nv, .ow, .w, .mf, .mh, .mi, .mo, .sb, .sc, .sd, .s2, .se, .sh, .si, .sx, .sr, .s1, .ss, .bp, .vc, .vg, .vi, .il" ).parent( "pre" ).css( "border", "1px solid #DEDEDE" );
|
|
</script>
|
|
|
|
|
|
<!-- Load Google Analytics -->
|
|
<script>
|
|
/*
|
|
(function(i, s, o, g, r, a, m) {
|
|
i['GoogleAnalyticsObject'] = r;
|
|
i[r] = i[r] || function() {
|
|
(i[r].q = i[r].q || []).push(arguments)
|
|
}, i[r].l = 1 * new Date();
|
|
a = s.createElement(o),
|
|
m = s.getElementsByTagName(o)[0];
|
|
a.async = 1;
|
|
a.src = g;
|
|
m.parentNode.insertBefore(a, m)
|
|
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
|
|
|
|
ga('create', 'UA-66582-32', 'auto');
|
|
ga('send', 'pageview');
|
|
*/
|
|
</script>
|
|
<!-- End of Google Analytics -->
|
|
|
|
<!-- Bootstrap core JavaScript
|
|
================================================== -->
|
|
<!-- Placed at the end of the document so the pages load faster -->
|
|
<script src="../theme/js/bootstrap.min.js"></script>
|
|
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
|
|
<script src="../theme/js/ie10-viewport-bug-workaround.js"></script>
|
|
|
|
|
|
</body>
|
|
|
|
</html> |