Repository: fangwei123456/spikingjelly (language: python)

Issue:
Bump underscore.string from 3.3.4 to 3.3.5 in /docs/pytorch_sphinx_theme
Bumps [underscore.string](https://github.com/epeli/underscore.string) from 3.3.4 to 3.3.5.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/esamattis/underscore.string/blob/master/CHANGELOG.markdown">underscore.string's changelog</a>.</em></p>
<blockquote>
<h3>3.3.5</h3>
<ul>
<li>Security fix</li>
<li><a href="https://github.com/epeli/underscore.string/compare/3.2.4...3.2.5">Full changelog</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/esamattis/underscore.string/commit/87ddc29fab2df47a1bf09c048d2e0ba468159d2f"><code>87ddc29</code></a> Release 3.3.5</li>
<li><a href="https://github.com/esamattis/underscore.string/commit/fde7ed699c26d294ed466624f9d843240cd14e94"><code>fde7ed6</code></a> Add 3.3.5 changelog</li>
<li><a href="https://github.com/esamattis/underscore.string/commit/f486cd684c94c12db48b45d52b1472a1b9661029"><code>f486cd6</code></a> Try to fix regexp redos</li>
<li>See full diff in <a href="https://github.com/epeli/underscore.string/compare/3.3.4...3.3.5">compare view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by <a href="https://www.npmjs.com/~esamatti">esamatti</a>, a new releaser for underscore.string since your current version.</p>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=underscore.string&package-manager=npm_and_yarn&previous-version=3.3.4&new-version=3.3.5)](https://help.github.com/articles/configuring-automated-security-fixes)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language
- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language
- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language
- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language

You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/fangwei123456/SpikingFlow/network/alerts).

</details>


Discussion / hints:

Fix patch:
diff --git a/docs/source/_static/examples/event_driven/tempotron_mnist/events.out.tfevents.1631178245.ubuntu.57781.0 b/docs/source/_static/examples/event_driven/tempotron_mnist/events.out.tfevents.1631178245.ubuntu.57781.0
new file mode 100644
index 00000000..18fde917
Binary files /dev/null and b/docs/source/_static/examples/event_driven/tempotron_mnist/events.out.tfevents.1631178245.ubuntu.57781.0 differ
diff --git a/docs/source/_static/examples/event_driven/tempotron_mnist/train_batch_acc_scale.png b/docs/source/_static/examples/event_driven/tempotron_mnist/train_batch_acc_scale.png
new file mode 100644
index 00000000..364e3824
Binary files /dev/null and b/docs/source/_static/examples/event_driven/tempotron_mnist/train_batch_acc_scale.png differ
diff --git a/docs/source/_static/examples/event_driven/tempotron_mnist/train_batch_acc_scale.svg b/docs/source/_static/examples/event_driven/tempotron_mnist/train_batch_acc_scale.svg
new file mode 100644
index 00000000..3dcdbbdf
--- /dev/null
+++ b/docs/source/_static/examples/event_driven/tempotron_mnist/train_batch_acc_scale.svg
@@ -0,0 +1,1 @@
+<svg viewBox="0 0 1707.2222900390625 400.0000305175781" xmlns="http://www.w3.org/2000/svg"><g><g><g><g><g><line x1="41.171875" y1="315.98306359051327" x2="36.171875" y2="315.98306359051327" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="41.171875" y1="248.61815026546932" x2="36.171875" y2="248.61815026546932" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="41.171875" y1="193.57700837104204" x2="36.171875" y2="193.57700837104204" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="41.171875" y1="147.04038598423782" x2="36.171875" y2="147.04038598423782" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="41.171875" y1="106.72853006303755" x2="36.171875" y2="106.72853006303755" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="41.171875" y1="71.17095315157088" x2="36.171875" y2="71.17095315157088" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="41.171875" y1="39.363616737993624" x2="36.171875" y2="39.363616737993624" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line></g><g transform="translate(31.171875, 0)"><text x="0" y="315.98306359051327" dx="0em" dy="0.3em" style="text-anchor: end; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">0.4</text><text x="0" y="248.61815026546932" dx="0em" dy="0.3em" style="text-anchor: end; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">0.5</text><text x="0" y="193.57700837104204" dx="0em" dy="0.3em" style="text-anchor: end; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">0.6</text><text x="0" y="147.04038598423782" dx="0em" dy="0.3em" style="text-anchor: end; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">0.7</text><text x="0" y="106.72853006303755" dx="0em" dy="0.3em" style="text-anchor: end; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">0.8</text><text x="0" y="71.17095315157088" dx="0em" dy="0.3em" style="text-anchor: end; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">0.9</text><text x="0" y="39.363616737993624" dx="0em" dy="0.3em" style="text-anchor: end; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">1</text></g><line x1="41.171875" y1="0" x2="41.171875" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line></g></g><g transform="translate(41, 0)" clip-path="url(#clip_0)"><clipPath id="clip_0"><rect width="1666" height="376"></rect></clipPath><g><g><g><line x1="0" y1="0" x2="0" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="151.45892045454545" y1="0" x2="151.45892045454545" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="302.9178409090909" y1="0" x2="302.9178409090909" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="454.3767613636363" y1="0" x2="454.3767613636363" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="605.8356818181818" y1="0" x2="605.8356818181818" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="757.2946022727273" y1="0" x2="757.2946022727273" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="908.7535227272726" y1="0" x2="908.7535227272726" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="1060.2124431818181" y1="0" x2="1060.2124431818181" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="1211.6713636363636" y1="0" x2="1211.6713636363636" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="1363.1302840909093" y1="0" x2="1363.1302840909093" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="1514.5892045454545" y1="0" x2="1514.5892045454545" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="1666.048125" y1="0" x2="1666.048125" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line></g><g><line x1="0" y1="315.98306359051327" x2="1666.048125" y2="315.98306359051327" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="0" y1="248.61815026546932" x2="1666.048125" y2="248.61815026546932" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="0" y1="193.57700837104204" x2="1666.048125" y2="193.57700837104204" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="0" y1="147.04038598423782" x2="1666.048125" y2="147.04038598423782" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="0" y1="106.72853006303755" x2="1666.048125" y2="106.72853006303755" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="0" y1="71.17095315157088" x2="1666.048125" y2="71.17095315157088" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="0" y1="39.363616737993624" x2="1666.048125" y2="39.363616737993624" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line></g></g></g><g><g><line x1="151.45892045454545" y1="0" x2="151.45892045454545" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(153, 153, 153)" stroke-width="1.5px"></line></g></g><g><g><g><g><g><path stroke="rgb(255, 112, 67)" stroke-width="2px" d="M154.06401388636365,323.14285714285717L155.15451811363636,278.33627088208556L155.3817064943182,248.61815026546932L157.5475690568182,258.2027799693011L158.5017602556818,248.61815026546932L159.1833253977273,213.06057335400263L159.88003643181818,188.89644208974306L161.42491742045456,268.1017152484299L163.6362176590909,159.420317861078L166.99860569318182,204.78908394502366L167.16521050568184,213.06057335400263L168.60407025,132.56791880812693L169.39165663636365,152.4800012197486L170.7093492443182,159.420317861078L172.92064948295453,173.7987723272984L173.54163105681818,166.5239509671984L174.08688317045454,221.5650928616257L174.32921744318182,145.69566002895868L174.9047613409091,166.5239509671984L175.16224150568183,196.7381940912049L180.84195102272727,159.420317861078L181.14486886363636,145.69566002895868L188.3543134772727,139.0604373780264L188.43004293750002,152.4800012197486L188.74810667045455,139.0604373780264L189.3690882443182,113.88832361538147L190.48988425568183,119.98732858039413L192.11049470454546,152.4800012197486L192.24680773295455,181.25323694042538L192.47399611363636,119.98732858039413L192.61030914204545,126.21209504599814L193.38274963636363,119.98732858039413L198.15370563068183,126.21209504599814L198.48691525568182,173.7987723272984L199.0927509375,166.5239509671984L200.54675657386363,139.0604373780264L200.91025798295456,119.98732858039413L202.28853415909091,126.21209504599814L204.46954261363638,139.0604373780264L205.46917148863636,113.88832361538147L205.98413181818182,139.0604373780264L206.2264660909091,132.56791880812693L206.80200998863637,152.4800012197486L207.0140524772727,113.88832361538147L207.05949015340912,166.5239509671984L209.74031304545454,113.88832361538147L210.7550878125,159.420317861078L212.39084415340906,166.5239509671984L213.69339086931816,132.56791880812693L213.87514157386366,113.88832361538147L214.78389509659092,159.420317861078L214.9504999090909,126.21209504599814L215.48060613068182,159.420317861078L216.8588823068182,119.98732858039413L217.01034122727273,126.21209504599814L220.58477175,119.98732858039413L224.64387081818182,113.88832361538147L228.5515109659091,119.98732858039413L229.248222,113.88832361538147L230.02066249431817,107.91009899917073L230.2175590909091,132.56791880812693L231.15660439772725,119.98732858039413L231.6564188352273,96.29749510073901L232.67119360227272,145.69566002895868L234.06461567045454,85.11508789470469L237.2906906761364,139.0604373780264L239.78976286363638,152.4800012197486L240.30472319318181,119.98732858039413L240.50161978977275,113.88832361538147L242.0465007784091,113.88832361538147L242.28883505113637,132.56791880812693L243.13700500568183,173.7987723272984L244.42440582954544,85.11508789470469L245.7420984375,139.0604373780264L246.55997660795455,126.21209504599814L247.39300067045454,126.21209504599814L247.92310689204547,173.7987723272984L250.95228530113636,107.91009899917073L253.39077392045454,139.0604373780264L253.69369176136365,126.21209504599814L255.20828096590907,126.21209504599814L256.2533475170454,119.98732858039413L257.34385174431816,113.88832361538147L258.2980429431818,126.21209504599814L261.3120754602273,173.7987723272984L264.0837737045455,102.04796378173853L264.50785868181816,107.91009899917073L265.7043841534091,107.91009899917073L267.23411925,145.69566002895868L268.4912282897728,107.91009899917073L268.5366659659091,102.04796378173853L268.9304591590909,107.91009899917073L269.5060030568182,139.0604373780264L272.41401432954547,113.88832361538147L274.4738556477273,173.7987723272984L277.0335114034091,113.88832361538147L280.9260056590909,113.88832361538147L281.01688101136364,102.04796378173853L281.98621810227274,119.98732858039413L282.60719967613636,113.88832361538147L283.1373058977273,139.0604373780264L283.5916826590909,113.88832361538147L284.01576763636365,85.11508789470469L284.3792690454545,145.69566002895868L284.40956082954546,107.91009899917073L285.0911259715909,119.98732858039413L285.2425848920455,102.04796378173853L285.90900414204543,79.67547265919389L288.65041060227276,113.88832361538147L290.0741244545455,79.67547265919389L291.5887136590909,113.88832361538147L292.17940344886364,126.21209504599814L292.7246555625,102.04796378173853L293.20932410795456,102.04796378173853L296.0567518125,102.04796378173853L298.55582400000003,119.98732858039413L299.17680557386365,159.420317861078L299.1919514659091,102.04796378173853L300.4490605056818,113.88832361538147L300.9034372670455,119.98732858039413L301.31237635227274,132.56791880812693L301.6607318693182,107.91009899917073L302.1454004147727,119.98732858039413L302.50890182386365,119.98732858039413L302.59977717613634,90.6545181345314L303.87203210795457,132.56791880812693L304.2809711931818,145.69566002895868L304.7504938465909,96.29749510073901L305.8107062897727,145.69566002895868L308.0977359886364,126.21209504599814L308.9004682670455,102.04796378173853L309.6577628693182,102.04796378173853L309.8546594659091,113.88832361538147L310.50593282386365,119.98732858039413L310.7634129886364,107.91009899917073L311.4146863465909,132.56791880812693L312.6566494943182,113.88832361538147L312.68694127840905,90.6545181345314L313.6259865852273,96.29749510073901L313.88346675,113.88832361538147L318.41208847159095,90.6545181345314L318.6089850681818,132.56791880812693L319.4874468068182,126.21209504599814L319.85094821590906,132.56791880812693L321.36553742045453,90.6545181345314L323.07702322159093,85.11508789470469L324.03121442045455,102.04796378173853L330.46821853977275,113.88832361538147L331.19522135795455,132.56791880812693L333.61856408522726,119.98732858039413L334.36071279545456,107.91009899917073L337.9957268863636,113.88832361538147L338.5712707840909,145.69566002895868L339.2376900340909,119.98732858039413L339.26798181818185,119.98732858039413L340.41906961363634,79.67547265919389L342.3123061193182,119.98732858039413L343.93291656818184,126.21209504599814L346.85607373295454,96.29749510073901L346.91665730113635,113.88832361538147L347.5073470909091,79.67547265919389L352.95986822727275,113.88832361538147L354.2321231590909,113.88832361538147L354.6864999204546,119.98732858039413L356.2616726931818,139.0604373780264L356.68575767045456,102.04796378173853L357.79140778977273,102.04796378173853L358.07917973863636,152.4800012197486L358.1549091988636,139.0604373780264L360.50252246590907,107.91009899917073L361.21437939204543,69.08173735460987L363.0621782215909,113.88832361538147L363.19849125,96.29749510073901L364.198120125,107.91009899917073L366.34883679545453,102.04796378173853L366.6214628522727,102.04796378173853L367.51507048295457,96.29749510073901L368.86305487500005,102.04796378173853L368.9690761193182,126.21209504599814L372.9372998352273,113.88832361538147L373.2705094602273,102.04796378173853L374.78509866477276,107.91009899917073L376.3905632215909,113.88832361538147L376.58745981818186,126.21209504599814L378.93507308522726,126.21209504599814L379.6317841193182,119.98732858039413L379.7075135795455,79.67547265919389L380.52539175,79.67547265919389L381.4492911647728,119.98732858039413L384.2664270852273,96.29749510073901L386.0687882386364,102.04796378173853L387.8862952840909,119.98732858039413L388.3103802613636,96.29749510073901L394.94428097727274,79.67547265919389L397.44335316477276,107.91009899917073L398.53385739204543,139.0604373780264L399.7303828636364,113.88832361538147L400.2604890852273,96.29749510073901L406.4248671477273,119.98732858039413L406.90953569318185,102.04796378173853L407.12157818181817,85.11508789470469L407.1670158579546,119.98732858039413L407.53051726704547,139.0604373780264L408.13635294886365,113.88832361538147L410.7565922727273,96.29749510073901L410.84746762500004,107.91009899917073L410.8626135170455,85.11508789470469L412.92245483522726,90.6545181345314L414.90656669318184,113.88832361538147L417.4662224488637,159.420317861078L418.511289,113.88832361538147L419.4957719829545,113.88832361538147L420.0107323125,159.420317861078L424.16070673295457,79.67547265919389L425.9176302102273,119.98732858039413L426.03879734659097,90.6545181345314L426.0993809147727,107.91009899917073L426.15996448295454,79.67547265919389L430.2190635511364,107.91009899917073L431.37015134659094,145.69566002895868L435.58070933522725,113.88832361538147L435.6715846875,102.04796378173853L435.8987730681818,139.0604373780264L436.1259614488636,107.91009899917073L437.7768636818182,107.91009899917073L440.88177155113635,102.04796378173853L440.9423551193182,107.91009899917073L442.3963607556818,126.21209504599814L444.0624088806818,102.04796378173853L444.94087061931816,119.98732858039413L446.81896123295456,96.29749510073901L447.500526375,90.6545181345314L448.5758847102273,139.0604373780264L451.9685645284091,119.98732858039413L453.19538178409096,113.88832361538147L454.3616154715909,113.88832361538147L461.84368614204544,107.91009899917073L463.13108696590905,126.21209504599814L463.7369226477273,107.91009899917073L464.161007625,113.88832361538147L464.4336336818182,102.04796378173853L464.4639254659091,102.04796378173853L465.8876393181818,69.08173735460987L467.11445657386366,96.29749510073901L469.0379848636364,79.67547265919389L469.2045896761364,96.29749510073901L469.5226534090909,102.04796378173853L470.06790552272724,107.91009899917073L470.31023979545455,107.91009899917073L471.47647348295453,69.08173735460987L473.56660658522725,113.88832361538147L474.23302583522724,107.91009899917073L479.7612764318182,113.88832361538147L479.7915682159091,107.91009899917073L485.6227366534091,113.88832361538147L487.1221799659091,90.6545181345314L489.31833431250004,126.21209504599814L490.4239844318182,90.6545181345314L495.30096167045457,126.21209504599814L496.1188398409091,79.67547265919389L500.8897958352273,126.21209504599814L501.4199020568182,90.6545181345314L504.812581875,126.21209504599814L505.9636696704545,107.91009899917073L505.9788155625001,85.11508789470469L507.3873835227273,113.88832361538147L508.7353679147727,102.04796378173853L520.6854767386363,107.91009899917073L522.0637529147727,113.88832361538147L522.1243364829546,96.29749510073901L522.4121084318182,139.0604373780264L525.6230375454546,126.21209504599814L525.8350800340909,119.98732858039413L526.4409157159091,74.33213887173368L527.5011281590909,107.91009899917073L527.7283165397728,102.04796378173853L528.2129850852273,126.21209504599814L528.3190063295455,113.88832361538147L529.1671762840909,107.91009899917073L529.9699085625,107.91009899917073L530.9089538693182,119.98732858039413L531.8025615,96.29749510073901L533.8775487102273,96.29749510073901L536.8309976590908,107.91009899917073L539.9359055284091,107.91009899917073L540.7537836988637,132.56791880812693L540.9052426193182,113.88832361538147L540.9355344034091,96.29749510073901L541.5716618693182,107.91009899917073L543.9950045965909,113.88832361538147L544.1767553011364,113.88832361538147L547.5694351193182,107.91009899917073L549.2354832443182,107.91009899917073L549.8413189261364,132.56791880812693L550.9621149375,119.98732858039413L551.6285341875,107.91009899917073L555.0363598977273,113.88832361538147L555.7482168238637,96.29749510073901L557.6111615454546,102.04796378173853L559.9436289204546,79.67547265919389L560.6100481704545,113.88832361538147L560.8372365511364,102.04796378173853L561.9731784545454,107.91009899917073L565.0629404318182,107.91009899917073L567.2742406704546,107.91009899917073L568.2890154375,74.33213887173368L569.8793341022728,90.6545181345314L570.2579814034091,96.29749510073901L572.3935521818182,102.04796378173853L573.0145337556819,119.98732858039413L573.9384331704546,85.11508789470469L575.6347730795455,96.29749510073901L576.2254628693182,102.04796378173853L577.0887787159091,90.6545181345314L582.3898409318182,90.6545181345314L584.8586213352273,107.91009899917073L587.5697360113636,113.88832361538147L588.478489534091,102.04796378173853L588.9025745113637,107.91009899917073L590.2657047954546,90.6545181345314L590.4474555,96.29749510073901L594.6125758125,96.29749510073901L595.3850163068182,79.67547265919389L597.2176692443182,102.04796378173853L598.1112768749999,139.0604373780264L599.2472187784091,113.88832361538147L600.080242840909,96.29749510073901L600.3225771136364,102.04796378173853L600.8526833352273,126.21209504599814L600.9435586875001,119.98732858039413L602.5641691363636,126.21209504599814L603.2760260625,85.11508789470469L603.5335062272727,96.29749510073901L603.9272994204546,85.11508789470469L605.441888625,126.21209504599814L606.6687058806818,90.6545181345314L606.8504565852272,85.11508789470469L607.0473531818183,102.04796378173853L610.3794494318182,113.88832361538147L610.8792638693182,69.08173735460987L616.4832439261363,102.04796378173853L619.3458175227273,96.29749510073901L619.7547566079545,107.91009899917073L620.3605922897727,102.04796378173853L620.4817594261364,113.88832361538147L621.072449215909,90.6545181345314L624.6771715227272,113.88832361538147L625.7373839659091,107.91009899917073L626.6764292727273,119.98732858039413L627.1913896022727,96.29749510073901L628.0849972329546,85.11508789470469L630.1751303352273,96.29749510073901L630.9778626136364,79.67547265919389L631.5836982954546,139.0604373780264L634.6431684886363,107.91009899917073L634.8855027613637,113.88832361538147L635.4156089829546,79.67547265919389L635.7639645,119.98732858039413L636.3395083977273,74.33213887173368L643.8064331761364,90.6545181345314L644.7454784829546,96.29749510073901L648.4107843579545,74.33213887173368L648.6076809545455,85.11508789470469L648.622826846591,107.91009899917073L649.7890605340909,132.56791880812693L650.758397625,85.11508789470469L651.4551086590909,85.11508789470469L655.4990618352273,126.21209504599814L657.4528819090909,90.6545181345314L657.7255079659091,126.21209504599814L661.890628278409,107.91009899917073L663.4355092670454,90.6545181345314L664.3594086818182,74.33213887173368L664.3897004659091,74.33213887173368L664.6926183068182,96.29749510073901L666.7373137329546,79.67547265919389L668.0398604488636,107.91009899917073L673.4469439090909,96.29749510073901L673.9770501306818,85.11508789470469L675.8551407443182,107.91009899917073L680.5200754943182,139.0604373780264L680.7927015511364,102.04796378173853L680.8229933352272,119.98732858039413L681.0653276079546,85.11508789470469L683.6855669318182,113.88832361538147L684.8518006193182,102.04796378173853L687.275143346591,96.29749510073901L688.5928359545454,85.11508789470469L688.7897325511365,79.67547265919389L689.9105285625001,69.08173735460987L690.3346135397728,102.04796378173853L691.1827834943182,102.04796378173853L692.2278500454545,85.11508789470469L694.8026516931818,113.88832361538147L695.3933414829546,107.91009899917073L695.9234477045455,90.6545181345314L696.8322012272727,74.33213887173368L704.2991260056818,79.67547265919389L705.9803200227273,96.29749510073901L706.2680919715909,113.88832361538147L707.1011160340909,96.29749510073901L707.2222831704546,85.11508789470469L710.1302944431818,96.29749510073901L710.1605862272727,96.29749510073901L710.2060239034091,119.98732858039413L710.3877746079546,96.29749510073901L710.5998170965909,74.33213887173368L711.7963425681818,107.91009899917073L712.8414091193182,107.91009899917073L713.0534516079546,79.67547265919389L713.6138496136364,126.21209504599814L714.6134784886364,79.67547265919389L719.399580375,79.67547265919389L721.6563182897728,102.04796378173853L722.065257375,119.98732858039413L723.2011992784091,79.67547265919389L724.0948069090908,96.29749510073901L726.0486269829546,119.98732858039413L732.8491325113636,90.6545181345314L732.8642784034091,96.29749510073901L733.1823421363637,96.29749510073901L734.3788676079545,113.88832361538147L734.8483902613636,96.29749510073901L735.5299554034091,79.67547265919389L739.1952612784091,119.98732858039413L739.7102216079546,85.11508789470469L740.3312031818182,74.33213887173368L740.6038292386363,85.11508789470469L742.5273575284091,90.6545181345314L745.7534325340908,79.67547265919389L749.3733007329545,96.29749510073901L750.4940967443182,102.04796378173853L751.05449475,90.6545181345314L752.9325853636363,107.91009899917073L757.748979034091,69.08173735460987L758.9606503977272,132.56791880812693L759.9299874886364,113.88832361538147L760.8690327954546,85.11508789470469L761.0659293920454,85.11508789470469L761.6111815056818,119.98732858039413L762.2321630795454,102.04796378173853L762.3230384318182,107.91009899917073L763.5952933636364,90.6545181345314L765.2007579204545,96.29749510073901L765.4733839772728,107.91009899917073L766.2761162556818,85.11508789470469L766.6396176647727,85.11508789470469L769.3052946647728,96.29749510073901L769.4264618011364,102.04796378173853L770.1534646193182,126.21209504599814L771.5620325795455,96.29749510073901L773.0917676761364,96.29749510073901L773.5007067613636,102.04796378173853L773.5461444375,96.29749510073901L773.6067280056818,102.04796378173853L776.8479489034091,113.88832361538147L778.1050579431818,79.67547265919389L779.6045012556818,69.08173735460987L780.5586924545455,85.11508789470469L780.6344219147727,69.08173735460987L781.0130692159091,107.91009899917073L782.3459077159091,79.67547265919389L784.1331229772727,79.67547265919389L786.2535478636364,90.6545181345314L787.1017178181819,79.67547265919389L787.7681370681818,102.04796378173853L789.373601625,102.04796378173853L789.5250605454545,63.92109069998856L789.5704982215909,107.91009899917073L794.5686425965908,74.33213887173368L795.6894386079546,107.91009899917073L800.5361240625,74.33213887173368L800.7481665511364,113.88832361538147L801.2176892045454,113.88832361538147L801.9901296988637,90.6545181345314L804.8224115113636,96.29749510073901L806.2309794715909,102.04796378173853L806.2764171477273,85.11508789470469L807.2154624545454,96.29749510073901L811.1231026022728,90.6545181345314L811.9864184488637,102.04796378173853L814.5006365284091,74.33213887173368L816.0606634090909,90.6545181345314L820.6044310227273,96.29749510073901L821.7403729261364,90.6545181345314L822.1644579034091,85.11508789470469L823.1640867784091,74.33213887173368L823.3761292670455,107.91009899917073L824.8907184715908,107.91009899917073L825.0270315,102.04796378173853L825.2087822045455,90.6545181345314L825.7843261022728,74.33213887173368L827.3292070909091,85.11508789470469L828.6468996988636,102.04796378173853L828.8437962954546,119.98732858039413L828.9346716477273,79.67547265919389L829.4041943011364,126.21209504599814L832.660561090909,96.29749510073901L833.2361049886364,85.11508789470469L833.7056276420454,102.04796378173853L838.8552309375,79.67547265919389L839.4913584034091,102.04796378173853L841.051385284091,126.21209504599814L841.6723668579547,79.67547265919389L844.4895027784091,96.29749510073901L852.3199289659091,79.67547265919389L855.6217334318181,96.29749510073901L855.8034841363636,102.04796378173853L857.4089486931819,102.04796378173853L859.1052886022728,113.88832361538147L861.4074641931818,90.6545181345314L861.6497984659092,85.11508789470469L861.9527163068182,102.04796378173853L863.5733267556818,107.91009899917073L864.0125576249999,90.6545181345314L864.2700377897728,102.04796378173853L864.3306213579546,119.98732858039413L864.5729556306818,107.91009899917073L865.0121865,102.04796378173853L865.7240434261364,102.04796378173853L866.0118153750001,90.6545181345314L867.9201977727274,96.29749510073901L868.5866170227273,79.67547265919389L870.2678110397727,119.98732858039413L871.5855036477274,74.33213887173368L872.5699866306819,63.92109069998856L872.782029119318,96.29749510073901L875.0842047102274,139.0604373780264L878.4465927443182,113.88832361538147L881.3243122329545,96.29749510073901L881.4606252613636,102.04796378173853L882.2027739715909,85.11508789470469L884.2929070738637,107.91009899917073L886.1861435795454,63.92109069998856L888.0793800852274,85.11508789470469L889.0032795,85.11508789470469L889.3213432329545,96.29749510073901L891.2297256306819,96.29749510073901L895.0161986420454,113.88832361538147L896.1067028693182,85.11508789470469L896.6519549829545,90.6545181345314L897.66672975,96.29749510073901L898.3634407840909,90.6545181345314L899.0752977102272,102.04796378173853L900.9230965397728,102.04796378173853L901.5895157897727,166.5239509671984L904.0734420852273,69.08173735460987L904.2400468977272,107.91009899917073L904.9973415000001,90.6545181345314L906.527076596591,90.6545181345314L906.6936814090909,102.04796378173853L908.1628329375001,96.29749510073901L908.3748754261364,90.6545181345314L908.9049816477273,79.67547265919389L912.7066005511364,85.11508789470469L913.6304999659092,102.04796378173853L916.4021982102272,90.6545181345314L917.8107661704546,90.6545181345314L917.8864956306819,74.33213887173368L918.4317477443183,102.04796378173853L919.3102094829546,79.67547265919389L920.1432335454544,119.98732858039413L920.2795465738636,96.29749510073901L921.1580083124999,113.88832361538147L922.3696796761365,63.92109069998856L925.323128625,107.91009899917073L930.98769225,85.11508789470469L932.9869500000001,132.56791880812693L935.9706907329546,85.11508789470469L937.9850943749999,113.88832361538147L938.0759697272728,107.91009899917073L938.2880122159091,145.69566002895868L938.6060759488636,107.91009899917073L939.2422034147728,74.33213887173368L942.5137160965909,90.6545181345314L943.0286764261364,85.11508789470469L944.3766608181818,96.29749510073901L944.5584115227273,119.98732858039413L945.0885177443183,113.88832361538147L947.2089426306818,102.04796378173853L947.3301097670455,102.04796378173853L948.7538236193183,79.67547265919389L949.1324709204547,63.92109069998856L953.6913844261363,102.04796378173853L955.4331620113636,90.6545181345314L958.0382554431819,74.33213887173368L963.6270896079545,96.29749510073901L966.4593714204545,90.6545181345314L969.0644648522726,74.33213887173368L969.9580724829545,85.11508789470469L971.5635370397728,53.857142857142875L976.273909465909,113.88832361538147L978.2428754318181,74.33213887173368L978.3034590000001,119.98732858039413L978.500355596591,102.04796378173853L980.9388442159091,85.11508789470469L985.4674659375,119.98732858039413L985.6795084261365,85.11508789470469L986.30049,85.11508789470469L986.7245749772728,85.11508789470469L986.8608880056819,69.08173735460987L988.436060778409,102.04796378173853L990.0415253352272,90.6545181345314L992.0407830852272,107.91009899917073L993.3130380170455,85.11508789470469L993.3584756931818,85.11508789470469L993.6765394261363,96.29749510073901L994.0097490511363,90.6545181345314L995.3577334431818,119.98732858039413L997.6599090340909,74.33213887173368L999.3562489431818,102.04796378173853L999.7954798124999,90.6545181345314L1001.62813275,90.6545181345314L1002.1733848636363,74.33213887173368L1002.8095123295456,90.6545181345314L1004.0363295852273,90.6545181345314L1006.8534655056819,96.29749510073901L1006.9140490738637,90.6545181345314L1007.0049244261363,113.88832361538147L1011.1548988465909,96.29749510073901L1011.6092756079546,96.29749510073901L1011.6395673920455,90.6545181345314L1013.7448463863636,74.33213887173368L1014.1537854715909,79.67547265919389L1015.7743959204545,85.11508789470469L1019.3336805511365,90.6545181345314L1021.0148745681818,96.29749510073901L1021.6055643579546,85.11508789470469L1023.6351138920454,63.92109069998856L1026.6037087329546,96.29749510073901L1026.7703135454547,96.29749510073901L1028.3757781022728,85.11508789470469L1029.0724891363636,119.98732858039413L1029.4056987613635,85.11508789470469L1029.5874494659092,69.08173735460987L1032.4954607386362,90.6545181345314L1035.479201471591,102.04796378173853L1035.9335782329545,85.11508789470469L1036.0547453693182,119.98732858039413L1036.6908728352273,85.11508789470469L1039.2353826988635,79.67547265919389L1039.8412183806818,79.67547265919389L1040.977160284091,107.91009899917073L1041.5224123977273,69.08173735460987L1043.0218557102273,126.21209504599814L1045.9298669829545,79.67547265919389L1050.2161544318183,74.33213887173368L1052.4123087784092,96.29749510073901L1053.4422294375,96.29749510073901L1053.4725212215908,107.91009899917073L1059.7883582045456,79.67547265919389L1060.2275890738638,96.29749510073901L1062.9235578579544,69.08173735460987L1064.4532929545453,69.08173735460987L1066.740322653409,132.56791880812693L1074.7222077613635,96.29749510073901L1078.0543040113637,85.11508789470469L1078.6752855852274,90.6545181345314L1081.2046495568184,102.04796378173853L1081.3864002613636,113.88832361538147L1085.354623977273,69.08173735460987L1086.3391069602274,107.91009899917073L1086.596587125,119.98732858039413L1089.0502216363636,58.84718172095417L1089.0805134204545,90.6545181345314L1089.6106196420453,90.6545181345314L1090.0347046193183,69.08173735460987L1090.3527683522727,90.6545181345314L1091.2918136590908,69.08173735460987L1091.731044528409,79.67547265919389L1095.7144141363638,96.29749510073901L1096.3505416022726,119.98732858039413L1098.9556350340908,139.0604373780264L1098.985926818182,102.04796378173853L1101.0003304602271,79.67547265919389L1102.9238587500001,53.857142857142875L1105.1654507727274,79.67547265919389L1106.7254776534091,96.29749510073901L1107.9220031250002,74.33213887173368L1108.0886079375,107.91009899917073L1109.4063005454545,102.04796378173853L1114.252986,90.6545181345314L1115.0708641704546,85.11508789470469L1116.055347153409,74.33213887173368L1119.357151619318,102.04796378173853L1122.1742875397726,107.91009899917073L1122.7346855454546,107.91009899917073L1128.3538114943183,79.67547265919389L1129.8532548068183,90.6545181345314L1130.3227774602274,79.67547265919389L1134.3364388522727,102.04796378173853L1134.8513991818184,79.67547265919389L1140.8643183238637,107.91009899917073L1141.57617525,74.33213887173368L1142.2577403920454,74.33213887173368L1142.6818253693182,96.29749510073901L1142.7272630454545,96.29749510073901L1144.3933111704546,96.29749510073901L1146.301693568182,96.29749510073901L1146.877237465909,69.08173735460987L1147.346760119318,102.04796378173853L1148.6795986193183,74.33213887173368L1148.937078784091,63.92109069998856L1150.0730206875,96.29749510073901L1150.4213762045456,96.29749510073901L1150.8908988579547,74.33213887173368L1152.799281255682,85.11508789470469L1154.268432784091,74.33213887173368L1154.571350625,102.04796378173853L1154.7833931136363,79.67547265919389L1155.5103959318183,90.6545181345314L1158.797054505682,132.56791880812693L1160.6751451193181,96.29749510073901L1160.9629170681817,96.29749510073901L1161.1446677727272,85.11508789470469L1161.3870020454547,102.04796378173853L1161.6444822102271,63.92109069998856L1162.2806096761365,107.91009899917073L1162.3260473522728,126.21209504599814L1162.90159125,79.67547265919389L1167.596817784091,74.33213887173368L1169.8232639147727,69.08173735460987L1170.4896831647727,79.67547265919389L1172.0800018295454,79.67547265919389L1173.9732383352273,85.11508789470469L1174.1549890397728,119.98732858039413L1178.8653614659092,79.67547265919389L1179.2591546590909,113.88832361538147L1179.8346985568182,96.29749510073901L1181.288704193182,79.67547265919389L1182.424646096591,90.6545181345314L1184.22700725,85.11508789470469L1186.0899519715908,96.29749510073901L1186.9532678181818,79.67547265919389L1188.0134802613636,69.08173735460987L1188.286106318182,90.6545181345314L1190.2702181761363,79.67547265919389L1190.754886721591,74.33213887173368L1190.8154702897727,107.91009899917073L1191.4364518636364,85.11508789470469L1193.890086375,102.04796378173853L1194.0566911875,69.08173735460987L1197.5251004659092,85.11508789470469L1197.6008299261364,107.91009899917073L1200.0696103295454,102.04796378173853L1201.614491318182,102.04796378173853L1202.9927674943183,90.6545181345314L1203.4925819318182,90.6545181345314L1204.5376484829546,90.6545181345314L1206.2188425,69.08173735460987L1206.748948721591,74.33213887173368L1208.414996846591,102.04796378173853L1208.9753948522728,63.92109069998856L1214.6248125852273,79.67547265919389L1216.8058210397728,85.11508789470469L1217.1238847727273,102.04796378173853L1220.577148159091,85.11508789470469L1220.6528776193184,74.33213887173368L1221.3192968693181,90.6545181345314L1221.516193465909,119.98732858039413L1222.8944696420456,79.67547265919389L1224.9240191761364,79.67547265919389L1226.075106971591,85.11508789470469L1226.1811282159092,74.33213887173368L1227.014152278409,79.67547265919389L1228.0440729375,90.6545181345314L1229.2254525170454,85.11508789470469L1229.937309443182,74.33213887173368L1230.1947896079546,85.11508789470469L1230.6946040454545,102.04796378173853L1232.20919325,69.08173735460987L1237.3285047613635,96.29749510073901L1238.4493007727272,63.92109069998856L1239.1157200227274,58.84718172095417L1239.4337837556818,102.04796378173853L1240.6757469034092,90.6545181345314L1240.7969140397727,63.92109069998856L1243.508028715909,74.33213887173368L1246.3403105284092,90.6545181345314L1250.2933883522728,79.67547265919389L1250.8234945738636,85.11508789470469L1251.3536007954547,107.91009899917073L1251.7473939886363,90.6545181345314L1258.9871303863636,113.88832361538147L1260.19880175,126.21209504599814L1260.7743456477272,113.88832361538147L1263.9701288693182,96.29749510073901L1264.560818659091,96.29749510073901L1265.6664687784091,85.11508789470469L1267.4991217159093,85.11508789470469L1269.8012973068182,126.21209504599814L1270.5131542329545,58.84718172095417L1270.9675309943182,85.11508789470469L1271.0735522386362,113.88832361538147L1271.391615971591,102.04796378173853L1272.7698921477274,79.67547265919389L1272.8001839318183,90.6545181345314L1274.5268156250002,74.33213887173368L1275.162943090909,90.6545181345314L1276.8895747840909,102.04796378173853L1278.495039340909,79.67547265919389L1279.5552517840908,96.29749510073901L1281.2515916931818,79.67547265919389L1283.1296823068183,69.08173735460987L1283.7052262045454,96.29749510073901L1284.9017516761364,96.29749510073901L1285.2349613011363,74.33213887173368L1287.4765533238638,79.67547265919389L1288.8699753920455,102.04796378173853L1289.0668719886364,102.04796378173853L1289.6121241022727,119.98732858039413L1290.187668,126.21209504599814L1290.5057317329547,85.11508789470469L1292.9896580284092,96.29749510073901L1294.0953081477273,96.29749510073901L1294.9283322102274,96.29749510073901L1295.9582528693181,107.91009899917073L1296.6701097954547,145.69566002895868L1297.7757599147728,69.08173735460987L1300.820084215909,107.91009899917073L1301.9408802272726,102.04796378173853L1302.622445369318,113.88832361538147L1305.8485203750001,90.6545181345314L1305.8636662670456,90.6545181345314L1307.181358875,96.29749510073901L1309.9227653352273,90.6545181345314L1310.5891845852273,113.88832361538147L1311.4373545397727,85.11508789470469L1314.5574083011363,69.08173735460987L1316.7384167556818,102.04796378173853L1317.874358659091,96.29749510073901L1317.9803799034091,90.6545181345314L1318.1772765,74.33213887173368L1319.8887623011365,79.67547265919389L1325.3564293295456,96.29749510073901L1326.0985780397727,79.67547265919389L1326.1440157159093,85.11508789470469L1326.9164562102274,119.98732858039413L1329.9001969431818,63.92109069998856L1332.0812053977272,79.67547265919389L1333.4291897897726,159.420317861078L1333.7472535227273,107.91009899917073L1334.1864843920455,96.29749510073901L1335.0195084545453,79.67547265919389L1335.6556359204546,79.67547265919389L1336.3069092784092,53.857142857142875L1337.0036203125,90.6545181345314L1337.8214984829547,96.29749510073901L1338.1244163238637,107.91009899917073L1338.169854,69.08173735460987L1339.2452123352273,96.29749510073901L1339.4269630397728,85.11508789470469L1340.6689261875,85.11508789470469L1340.7143638636364,96.29749510073901L1341.7745763068183,74.33213887173368L1342.501579125,107.91009899917073L1344.1221895738638,90.6545181345314L1344.2736484943182,132.56791880812693L1347.0453467386365,90.6545181345314L1348.8931455681818,79.67547265919389L1350.2259840681818,96.29749510073901L1350.2411299602275,74.33213887173368L1350.6803608295454,74.33213887173368L1351.4679472159091,69.08173735460987L1356.3752162386363,85.11508789470469L1356.7235717556819,74.33213887173368L1361.0855886647728,79.67547265919389L1361.9943421875,79.67547265919389L1366.9016112102274,79.67547265919389L1367.5074468920454,69.08173735460987L1370.2942910284091,85.11508789470469L1370.5972088693181,79.67547265919389L1371.3847952556819,90.6545181345314L1380.4268928068182,96.29749510073901L1383.0471321306818,79.67547265919389L1383.1985910511364,102.04796378173853L1383.849864409091,113.88832361538147L1383.8650103011364,107.91009899917073L1384.8949309602272,58.84718172095417L1386.2277694602274,79.67547265919389L1387.5908997443182,85.11508789470469L1389.1963643011363,90.6545181345314L1392.0589378977274,74.33213887173368L1395.1335539829545,102.04796378173853L1397.2236870852273,102.04796378173853L1400.7223881477273,85.11508789470469L1401.8583300511364,85.11508789470469L1404.1453597500001,96.29749510073901L1404.7511954318181,102.04796378173853L1407.810665625,107.91009899917073L1410.839844034091,74.33213887173368L1411.1276159829547,58.84718172095417L1411.2336372272728,74.33213887173368L1413.47522925,85.11508789470469L1418.3976441647728,85.11508789470469L1420.6089444034092,69.08173735460987L1420.669527971591,96.29749510073901L1422.0932418238635,69.08173735460987L1422.2598466363636,126.21209504599814L1422.9111199943181,63.92109069998856L1423.2594755113637,107.91009899917073L1423.5472474602273,119.98732858039413L1424.3045420625,85.11508789470469L1427.9698479375,107.91009899917073L1429.6813337386363,102.04796378173853L1430.5749413693184,96.29749510073901L1430.6809626136362,69.08173735460987L1431.7866127329546,69.08173735460987L1433.1800348011363,85.11508789470469L1433.3012019374999,74.33213887173368L1433.5586821022728,69.08173735460987L1436.163775534091,96.29749510073901L1436.3152344545456,102.04796378173853L1436.7090276477272,119.98732858039413L1438.6779936136363,79.67547265919389L1439.3141210795457,126.21209504599814L1440.7832726079546,113.88832361538147L1441.3588165056817,96.29749510073901L1441.8434850511364,113.88832361538147L1442.9491351704546,69.08173735460987L1445.2210189772727,107.91009899917073L1445.6451039545454,79.67547265919389L1447.129401375,79.67547265919389L1447.6897993806817,107.91009899917073L1448.0230090056818,69.08173735460987L1449.2195344772726,90.6545181345314L1450.7341236818183,107.91009899917073L1450.8855826022727,79.67547265919389L1451.8852114772728,96.29749510073901L1453.1423205170456,107.91009899917073L1457.3680243977271,74.33213887173368L1460.0034096136364,107.91009899917073L1460.094284965909,79.67547265919389L1460.3820569147729,119.98732858039413L1462.9720044545456,85.11508789470469L1463.7747367329546,96.29749510073901L1463.9716333295455,85.11508789470469L1464.1685299261362,85.11508789470469L1464.8500950681819,74.33213887173368L1467.1371247670454,74.33213887173368L1467.5460638522727,85.11508789470469L1468.2276289943181,113.88832361538147L1470.3026162045455,90.6545181345314L1471.7263300568181,107.91009899917073L1474.013359755682,85.11508789470469L1474.2859858125,96.29749510073901L1477.8604163352275,102.04796378173853L1479.5719021363636,96.29749510073901L1481.1319290170454,85.11508789470469L1481.1622208011365,113.88832361538147L1481.1773666931817,107.91009899917073L1482.9191442784092,85.11508789470469L1483.0706031988636,74.33213887173368L1485.7665719829545,90.6545181345314L1487.6901002727275,69.08173735460987L1489.0380846647727,90.6545181345314L1492.3550350227272,69.08173735460987L1492.7336823238636,85.11508789470469L1496.8988026363638,90.6545181345314L1504.9261254204546,85.11508789470469L1506.1983803522728,90.6545181345314L1509.1821210852272,79.67547265919389L1510.8481692102273,119.98732858039413L1515.2556237954545,90.6545181345314L1516.7247753238635,126.21209504599814L1517.1942979772728,102.04796378173853L1517.4517781420454,79.67547265919389L1518.4211152329547,90.6545181345314L1521.5260231022728,102.04796378173853L1521.5714607784091,90.6545181345314L1523.3283842556818,74.33213887173368L1523.4344055,63.92109069998856L1524.4946179431818,96.29749510073901L1526.796793534091,69.08173735460987L1527.0391278068182,74.33213887173368L1528.2205073863636,79.67547265919389L1528.9778019886364,96.29749510073901L1529.629075346591,85.11508789470469L1529.7502424829545,85.11508789470469L1530.9467679545455,90.6545181345314L1536.0963712500002,85.11508789470469L1537.398917965909,85.11508789470469L1540.897619028409,79.67547265919389L1541.064223840909,58.84718172095417L1542.6091048295455,90.6545181345314L1544.7749673920455,90.6545181345314L1547.7132704488636,85.11508789470469L1548.7128993238637,63.92109069998856L1548.728045215909,74.33213887173368L1548.8037746761365,96.29749510073901L1548.9097959204546,96.29749510073901L1550.727302965909,107.91009899917073L1556.2555535625002,113.88832361538147L1556.6342008636364,132.56791880812693L1557.3460577897729,85.11508789470469L1560.6478622556817,113.88832361538147L1562.0412843238637,90.6545181345314L1565.4036723579547,96.29749510073901L1568.0087657897727,69.08173735460987L1570.613859221591,85.11508789470469" style="fill: none;" fill="none"></path></g></g></g></g></g></g><g transform="translate(41, 377)" clip-path="url(#clip_1)"><clipPath id="clip_1"><rect width="1666" height="22"></rect></clipPath><g><g><line x1="0" y1="0" x2="0" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="151.45892045454545" y1="0" x2="151.45892045454545" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="302.9178409090909" y1="0" x2="302.9178409090909" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="454.3767613636363" y1="0" x2="454.3767613636363" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="605.8356818181818" y1="0" x2="605.8356818181818" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="757.2946022727273" y1="0" x2="757.2946022727273" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="908.7535227272726" y1="0" x2="908.7535227272726" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="1060.2124431818181" y1="0" x2="1060.2124431818181" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="1211.6713636363636" y1="0" x2="1211.6713636363636" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="1363.1302840909093" y1="0" x2="1363.1302840909093" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="1514.5892045454545" y1="0" x2="1514.5892045454545" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="1666.048125" y1="0" x2="1666.048125" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line></g><g transform="translate(0, 8)"><text x="0" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: hidden; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">-10k</text><text x="151.45892045454545" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">0</text><text x="302.9178409090909" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">10k</text><text x="454.3767613636363" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">20k</text><text x="605.8356818181818" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">30k</text><text x="757.2946022727273" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">40k</text><text x="908.7535227272726" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">50k</text><text x="1060.2124431818181" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">60k</text><text x="1211.6713636363636" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">70k</text><text x="1363.1302840909093" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">80k</text><text x="1514.5892045454545" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">90k</text><text x="1666.048125" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: hidden; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">100k</text></g><line x1="0" y1="0" x2="1666.048125" y2="0" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line></g></g></g></g></svg>
\ No newline at end of file
diff --git a/docs/source/clock_driven/10_propagation_pattern.rst b/docs/source/clock_driven/10_propagation_pattern.rst
index c779c2ad..2176ecb6 100644
--- a/docs/source/clock_driven/10_propagation_pattern.rst
+++ b/docs/source/clock_driven/10_propagation_pattern.rst
@@ -53,7 +53,7 @@ SpikingJelly中的绝大多数模块（:class:`spikingjelly.clock_driven.rnn` 
 
 输出为：
 
-.. code-block:: bash
+.. code-block:: shell
 
     if_node output spikes at t=0 tensor([1., 1., 1., 0.])
     if_node output spikes at t=1 tensor([0., 0., 0., 1.])
@@ -142,7 +142,7 @@ SpikingJelly中的绝大多数模块（:class:`spikingjelly.clock_driven.rnn` 
 
 输出为：
 
-.. code-block:: bash
+.. code-block:: shell
 
     torch.Size([16, 8, 3])
 
@@ -173,7 +173,7 @@ SpikingJelly中的绝大多数模块（:class:`spikingjelly.clock_driven.rnn` 
 
 输出为：
 
-.. code-block:: bash
+.. code-block:: shell
 
     net_step_by_step.state_dict: odict_keys(['0.weight', '1.weight', '1.bias', '1.running_mean', '1.running_var', '1.num_batches_tracked'])
     net_layer_by_layer.state_dict: odict_keys(['0.0.weight', '0.1.weight', '0.1.bias', '0.1.running_mean', '0.1.running_var', '0.1.num_batches_tracked'])
diff --git a/docs/source/clock_driven/11_cext_neuron_with_lbl.rst b/docs/source/clock_driven/11_cext_neuron_with_lbl.rst
index 76121c10..fdf7184e 100644
--- a/docs/source/clock_driven/11_cext_neuron_with_lbl.rst
+++ b/docs/source/clock_driven/11_cext_neuron_with_lbl.rst
@@ -133,7 +133,7 @@ CUDA加速的神经元
 :doc:`../clock_driven/4_conv_fashion_mnist` 中完全相同的输入参数和设备（`Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz` 的CPU
 和 `GeForce RTX 2080 Ti` 的GPU）来运行，结果如下：
 
-.. code-block:: bash
+.. code-block:: shell
 
     (pytorch-env) root@e8b6e4800dae4011eb0918702bd7ddedd51c-fangw1598-0:/# python -m spikingjelly.clock_driven.examples.conv_fashion_mnist -opt SGD -data_dir /userhome/datasets/FashionMNIST/ -amp -cupy
 
diff --git a/docs/source/clock_driven/3_fc_mnist.rst b/docs/source/clock_driven/3_fc_mnist.rst
index 31421ca2..14115dd5 100644
--- a/docs/source/clock_driven/3_fc_mnist.rst
+++ b/docs/source/clock_driven/3_fc_mnist.rst
@@ -13,24 +13,22 @@
 `MNIST数据集 <http://yann.lecun.com/exdb/mnist/>`__\ 包含若干尺寸为\ :math:`28\times 28`\ 的8位灰度图像，总共有0~9共10个类别。以MNIST的分类为例，一个简单的单层ANN网络如下：
 
 .. code-block:: python
-   :emphasize-lines: 4
 
-   net = nn.Sequential(
-       nn.Flatten(),
-       nn.Linear(28 * 28, 10, bias=False),
-       nn.Softmax()
-       )
+    net = nn.Sequential(
+        nn.Flatten(),
+        nn.Linear(28 * 28, 10, bias=False),
+        nn.Softmax()
+        )
 
 我们也可以用完全类似结构的SNN来进行分类任务。就这个网络而言，只需要先去掉所有的激活函数，再将神经元添加到原来激活函数的位置，这里我们选择的是LIF神经元：
 
 .. code-block:: python
-   :emphasize-lines: 4
 
-   net = nn.Sequential(
-       nn.Flatten(),
-       nn.Linear(28 * 28, 10, bias=False),
-       neuron.LIFNode(tau=tau)
-       )
+    net = nn.Sequential(
+        nn.Flatten(),
+        nn.Linear(28 * 28, 10, bias=False),
+        neuron.LIFNode(tau=tau)
+        )
 
 其中膜电位衰减常数\ :math:`\tau`\ 需要通过参数\ ``tau``\ 设置。
 
@@ -43,10 +41,10 @@
 
 .. code-block:: python
 
-   # 使用Adam优化器
-   optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate)
-   # 使用泊松编码器
-   encoder = encoding.PoissonEncoder()
+    # 使用Adam优化器
+    optimizer = torch.optim.Adam(net.parameters(), lr=lr)
+    # 使用泊松编码器
+    encoder = encoding.PoissonEncoder()
 
 训练代码的编写需要遵循以下三个要点：
 
@@ -60,54 +58,68 @@
 
 .. code-block:: python
 
-   for img, label in train_data_loader:
-       img = img.to(device)
-       label = label.to(device)
-       label_one_hot = F.one_hot(label, 10).float()
+    net.train()
+    print("Epoch {}:".format(epoch))
+    print("Training...")
+    for img, label in tqdm(train_data_loader):
+        img = img.to(device)
+        label = label.to(device)
+        label_one_hot = F.one_hot(label, 10).float()
+
+        optimizer.zero_grad()
+
+        # 运行T个时长，out_spikes_counter是shape=[batch_size, 10]的tensor
+        # 记录整个仿真时长内，输出层的10个神经元的脉冲发放次数
+        for t in range(T):
+            if t == 0:
+                out_spikes_counter = net(encoder(img).float())
+            else:
+                out_spikes_counter += net(encoder(img).float())
+
+        # out_spikes_counter / T 得到输出层10个神经元在仿真时长内的脉冲发放频率
+        out_spikes_counter_frequency = out_spikes_counter / T
+
+        # 损失函数为输出层神经元的脉冲发放频率，与真实类别的MSE
+        # 这样的损失函数会使，当类别i输入时，输出层中第i个神经元的脉冲发放频率趋近1，而其他神经元的脉冲发放频率趋近0
+        loss = F.mse_loss(out_spikes_counter_frequency, label_one_hot)
+        loss.backward()
+        optimizer.step()
+        # 优化一次参数后，需要重置网络的状态，因为SNN的神经元是有“记忆”的
+        functional.reset_net(net)
+
+        # 正确率的计算方法如下。认为输出层中脉冲发放频率最大的神经元的下标i是分类结果
+        train_accuracy = (out_spikes_counter_frequency.max(1)[1] == label.to(device)).float().mean().item()
+        
+        writer.add_scalar('train_accuracy', train_accuracy, train_times)
+        train_accs.append(train_accuracy)
+
+        train_times += 1
 
-       optimizer.zero_grad()
-
-       # 运行T个时长，out_spikes_counter是shape=[batch_size, 10]的tensor
-       # 记录整个仿真时长内，输出层的10个神经元的脉冲发放次数
-       for t in range(T):
-           if t == 0:
-               out_spikes_counter = net(encoder(img).float())
-           else:
-               out_spikes_counter += net(encoder(img).float())
+完整的代码位于\ ``clock_driven.examples.lif_fc_mnist.py``\ ，在代码中我们还使用了Tensorboard来保存训练日志。可以直接在命令行运行它：
 
-       # out_spikes_counter / T 得到输出层10个神经元在仿真时长内的脉冲发放频率
-       out_spikes_counter_frequency = out_spikes_counter / T
+.. code-block:: shell
 
-       # 损失函数为输出层神经元的脉冲发放频率，与真实类别的MSE
-       # 这样的损失函数会使，当类别i输入时，输出层中第i个神经元的脉冲发放频率趋近1，而其他神经元的脉冲发放频率趋近0
-       loss = F.mse_loss(out_spikes_counter_frequency, label_one_hot)
-       loss.backward()
-       optimizer.step()
-       # 优化一次参数后，需要重置网络的状态，因为SNN的神经元是有“记忆”的
-       functional.reset_net(net)
+    $ python <PATH>/lif_fc_mnist.py --help
+    usage: lif_fc_mnist.py [-h] [--device DEVICE] [--dataset-dir DATASET_DIR] [--log-dir LOG_DIR] [--model-output-dir MODEL_OUTPUT_DIR] [-b BATCH_SIZE] [-T T] [--lr LR] [--tau TAU] [-N EPOCH]
 
-完整的代码位于\ ``clock_driven.examples.lif_fc_mnist.py``\ ，在代码中我们还使用了Tensorboard来保存训练日志。可以直接在命令行运行它：
+    spikingjelly LIF MNIST Training
 
-.. code:: shell
-    $ python <PATH>/lif_fc_mnist.py --help
-    usage: lif_fc_mnist.py [-h] [--device DEVICE] [--dataset-dir DATASET_DIR] [--log-dir LOG_DIR] [-b BATCH_SIZE] [-T T] [--lr LR] [--gpu GPU]
-                        [--tau TAU] [-N EPOCH]
-    
-    spikingjelly MNIST Training
-    
     optional arguments:
     -h, --help            show this help message and exit
     --device DEVICE       运行的设备，例如“cpu”或“cuda:0” Device, e.g., "cpu" or "cuda:0"
     --dataset-dir DATASET_DIR
                             保存MNIST数据集的位置，例如“./” Root directory for saving MNIST dataset, e.g., "./"
     --log-dir LOG_DIR     保存tensorboard日志文件的位置，例如“./” Root directory for saving tensorboard logs, e.g., "./"
+    --model-output-dir MODEL_OUTPUT_DIR
+                            模型保存路径，例如“./” Model directory for saving, e.g., "./"
     -b BATCH_SIZE, --batch-size BATCH_SIZE
+                            Batch 大小，例如“64” Batch size, e.g., "64"
     -T T, --timesteps T   仿真时长，例如“100” Simulating timesteps, e.g., "100"
     --lr LR, --learning-rate LR
                             学习率，例如“1e-3” Learning rate, e.g., "1e-3":
-    --gpu GPU             GPU id to use.
     --tau TAU             LIF神经元的时间常数tau，例如“100.0” Membrane time constant, tau, for LIF neurons, e.g., "100.0"
     -N EPOCH, --epoch EPOCH
+                            训练epoch，例如“100” Training epoch, e.g., "100"
 
 需要注意的是，训练这样的SNN，所需显存数量与仿真时长 ``T`` 线性相关，更长的 ``T`` 相当于使用更小的仿真步长，训练更为“精细”，但训练效果不一定更好。\ ``T``
 太大时，SNN在时间上展开后会变成一个非常深的网络，这将导致梯度的传递容易衰减或爆炸。
@@ -128,7 +140,7 @@
 
 用训好的模型进行分类，得到分类结果
 
-.. code-block:: python
+.. code-block:: shell
 
    Firing rate: [[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]]
 
@@ -140,4 +152,4 @@
 .. image:: ../_static/tutorials/clock_driven/3_fc_mnist/2d_heatmap.*
     :width: 100%
 
-可以看到除了正确类别对应的神经元外，其它神经元均未发放任何脉冲。完整的训练代码可见 `clock_driven/examples/lif_fc_mnist.py <https://github.com/fangwei123456/spikingjelly/blob/master/spikingjelly/clock_driven/examples/lif_fc_mnist.py>`_ 。
\ No newline at end of file
+可以看到除了正确类别对应的神经元外，其它神经元均未发放任何脉冲。完整的训练代码可见 `clock_driven/examples/lif_fc_mnist.py <https://github.com/fangwei123456/spikingjelly/blob/master/spikingjelly/clock_driven/examples/lif_fc_mnist.py>`_ 。
diff --git a/docs/source/clock_driven/4_conv_fashion_mnist.rst b/docs/source/clock_driven/4_conv_fashion_mnist.rst
index 7dd215b1..2d8c9820 100644
--- a/docs/source/clock_driven/4_conv_fashion_mnist.rst
+++ b/docs/source/clock_driven/4_conv_fashion_mnist.rst
@@ -2,7 +2,7 @@
 =======================================
 本教程作者： `fangwei123456 <https://github.com/fangwei123456>`_
 
-在本节教程中，我们将搭建一个卷积脉冲神经网络，对 `Fashion-MNIST <https://github.com/zalandoresearch/fashion-mnist>`_ 数据集进行
+在本节教程中，我们将搭建一个卷积脉冲神经网络，对 `Fashion-MNIST <https://github.com/zalandoresearch/fashion-mnist>`__ 数据集进行
 分类。Fashion-MNIST数据集，与MNIST数据集的格式相同，均为 ``1 * 28 * 28`` 的灰度图片。
 
 网络结构
@@ -161,7 +161,7 @@ ANN中常见的卷积神经网络，大多数是卷积+全连接层的形式，
 -----------------
 完整的代码位于 :class:`spikingjelly.clock_driven.examples.conv_fashion_mnist`，训练命令如下：
 
-.. code-block:: bash
+.. code-block:: shell
 
     Classify Fashion-MNIST
 
@@ -190,7 +190,7 @@ ANN中常见的卷积神经网络，大多数是卷积+全连接层的形式，
 
 检查点会被保存在 ``tensorboard`` 日志文件的同级目录下。实验机器使用 `Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz` 的CPU和 `GeForce RTX 2080 Ti` 的GPU。
 
-.. code-block:: bash
+.. code-block:: shell
 
     (pytorch-env) root@e8b6e4800dae4011eb0918702bd7ddedd51c-fangw1598-0:/# python -m spikingjelly.clock_driven.examples.conv_fashion_mnist -opt SGD -data_dir /userhome/datasets/FashionMNIST/ -amp
 
@@ -253,7 +253,7 @@ ANN中常见的卷积神经网络，大多数是卷积+全连接层的形式，
 .. image:: ../_static/tutorials/clock_driven/4_conv_fashion_mnist/test.*
     :width: 100%
 
-在训练64个epoch后，最高测试集正确率可以达到93.3%，对于SNN而言是非常不错的性能，仅仅略低于 `Fashion-MNIST <https://github.com/zalandoresearch/fashion-mnist>`_
+在训练64个epoch后，最高测试集正确率可以达到93.3%，对于SNN而言是非常不错的性能，仅仅略低于 `Fashion-MNIST <https://github.com/zalandoresearch/fashion-mnist>`__
 的BenchMark中使用Normalization, random horizontal flip, random vertical flip, random translation, random rotation的ResNet18的94.9%正确率。
 
 可视化编码器
@@ -276,6 +276,7 @@ ANN中常见的卷积神经网络，大多数是卷积+全连接层的形式，
             self.conv = nn.Sequential(
                 neuron.IFNode(surrogate_function=surrogate.ATan()),
             ...
+            )
 
 现在让我们来查看一下，训练好的编码器，编码效果如何。让我们新建一个python文件，导入相关的模块，并重新定义一个 ``batch_size=1`` 的数据加载器，因为我们想要一
 张图片一张图片的查看：
diff --git a/docs/source/clock_driven/6_dqn_cart_pole.rst b/docs/source/clock_driven/6_dqn_cart_pole.rst
index 7f579b0c..27a31482 100644
--- a/docs/source/clock_driven/6_dqn_cart_pole.rst
+++ b/docs/source/clock_driven/6_dqn_cart_pole.rst
@@ -25,7 +25,6 @@ Cart Position，Cart Velocity，Pole Angle和Pole Velocity At Tip，这是一个
 .. code-block:: python
 
     class NonSpikingLIFNode(neuron.LIFNode):
-            class NonSpikingLIFNode(neuron.LIFNode):
         def forward(self, dv: torch.Tensor):
             self.neuronal_charge(dv)
             # self.neuronal_fire()
diff --git a/docs/source/clock_driven/9_spikingLSTM_text.rst b/docs/source/clock_driven/9_spikingLSTM_text.rst
index 961ee002..f40774b5 100644
--- a/docs/source/clock_driven/9_spikingLSTM_text.rst
+++ b/docs/source/clock_driven/9_spikingLSTM_text.rst
@@ -180,7 +180,7 @@
 
 设定 ``IF_TRAIN = 1`` ，在Python Console中运行 ``%run ./spiking_lstm_text.py`` ，输出如下：
 
-.. code-block:: python
+.. code-block:: shell
 
     Backend Qt5Agg is interactive backend. Turning interactive mode on.
     Training...
@@ -282,7 +282,7 @@
 
 设定 ``IF_TRAIN = 0``，在Python Console中运行 ``%run ./spiking_lstm_text.py``，输出如下：
 
-.. code-block:: python
+.. code-block:: shell
 
     Testing...
     Calculating testing accuracy...
diff --git a/docs/source/clock_driven_en/10_propagation_pattern.rst b/docs/source/clock_driven_en/10_propagation_pattern.rst
index 6773bc9f..f7f3d0af 100644
--- a/docs/source/clock_driven_en/10_propagation_pattern.rst
+++ b/docs/source/clock_driven_en/10_propagation_pattern.rst
@@ -53,7 +53,7 @@ Let us use :class:`spikingjelly.clock_driven.layer.MultiStepContainer` to implem
 
 The outputs are:
 
-.. code-block:: bash
+.. code-block:: shell
 
     if_node output spikes at t=0 tensor([1., 1., 1., 0.])
     if_node output spikes at t=1 tensor([0., 0., 0., 1.])
@@ -143,7 +143,7 @@ For a stateless layer, we can concatenate inputs ``shape=[T, batch_size, ...]``
 
 The outputs are
 
-.. code-block:: bash
+.. code-block:: shell
 
     torch.Size([16, 8, 3])
 
@@ -175,7 +175,7 @@ because we introduce an external wrapper. Here is an example:
 
 The outputs are:
 
-.. code-block:: bash
+.. code-block:: shell
 
     net_step_by_step.state_dict: odict_keys(['0.weight', '1.weight', '1.bias', '1.running_mean', '1.running_var', '1.num_batches_tracked'])
     net_layer_by_layer.state_dict: odict_keys(['0.0.weight', '0.1.weight', '0.1.bias', '0.1.running_mean', '0.1.running_var', '0.1.num_batches_tracked'])
diff --git a/docs/source/clock_driven_en/11_cext_neuron_with_lbl.rst b/docs/source/clock_driven_en/11_cext_neuron_with_lbl.rst
index 4f7e9f6f..180e4f4b 100644
--- a/docs/source/clock_driven_en/11_cext_neuron_with_lbl.rst
+++ b/docs/source/clock_driven_en/11_cext_neuron_with_lbl.rst
@@ -131,7 +131,7 @@ Now let us use the CUDA-Enhanced Multi-Step neuron to re-implement the network i
 
 The fully codes are available at :class:`spikingjelly.clock_driven.examples.conv_fashion_mnist`. Run this example with the same arguments and devices as those in :doc:`../clock_driven_en/4_conv_fashion_mnist`. The outputs are:
 
-.. code-block:: bash
+.. code-block:: shell
 
     (pytorch-env) root@e8b6e4800dae4011eb0918702bd7ddedd51c-fangw1598-0:/# python -m spikingjelly.clock_driven.examples.conv_fashion_mnist -opt SGD -data_dir /userhome/datasets/FashionMNIST/ -amp -cupy
 
diff --git a/docs/source/clock_driven_en/14_classify_dvsg.rst b/docs/source/clock_driven_en/14_classify_dvsg.rst
index 61e405fa..beca7873 100644
--- a/docs/source/clock_driven_en/14_classify_dvsg.rst
+++ b/docs/source/clock_driven_en/14_classify_dvsg.rst
@@ -121,8 +121,6 @@ If the reader is not familiar with propagation pattern in SpikingJelly, please r
 We have built the net in the step-by-step model, whose codes are user-friendly but run slower. Now let us re-write the
 net in the layer-by-layer mode with CUDA neurons:
 
-.. code:: python
-
 .. code:: python
 
     import cupy
diff --git a/docs/source/clock_driven_en/2_encoding.rst b/docs/source/clock_driven_en/2_encoding.rst
index deff0112..439d6059 100644
--- a/docs/source/clock_driven_en/2_encoding.rst
+++ b/docs/source/clock_driven_en/2_encoding.rst
@@ -174,6 +174,7 @@ linear (``function_type='linear'``)
 
 .. math::
     t_f(x) = (T - 1)(1 - x)
+    
 When the encoding type is logarithmic (``function_type='log'`` )
 
 .. math::
diff --git a/docs/source/clock_driven_en/3_fc_mnist.rst b/docs/source/clock_driven_en/3_fc_mnist.rst
index fbf21687..089f28ea 100644
--- a/docs/source/clock_driven_en/3_fc_mnist.rst
+++ b/docs/source/clock_driven_en/3_fc_mnist.rst
@@ -1,42 +1,43 @@
 Clock driven: Use single-layer fully connected SNN to identify MNIST
-====================================================================
-Author: `Yanqi-Chen <https://github.com/Yanqi-Chen>`_
+=========================================================================
 
-Translator: `YeYumin <https://github.com/YEYUMIN>`_
+Author: `Yanqi-Chen <https://github.com/Yanqi-Chen>`__
+
+Translator: `YeYumin <https://github.com/YEYUMIN>`__
 
 This tutorial will introduce how to train a simplest MNIST classification network using encoders and alternative gradient methods.
 
 Build a simple SNN network from scratch
 ---------------------------------------------
 
-When building a neural network in PyTorch, we can simply use ``nn.Sequential`` to stack multiple network layers to get a
+When building a neural network in PyTorch, we can simply use\ ``nn.Sequential``\ to stack multiple network layers to get a
 feedforward network. The input data will flow through each network layer in order to get the output.
 
-The `MNIST Dateset <http://yann.lecun.com/exdb/mnist/>`__ \contains several 8-bit grayscale images with the size of
-\ :math:`28\times 28`\, which include total of 10 categories from 0 to 9. Taking the classification of MNIST as an example,
+The `MNIST Dateset <http://yann.lecun.com/exdb/mnist/>`__ \ contains several 8-bit grayscale images with the size of
+\ :math:`28\times 28`\ , which include total of 10 categories from 0 to 9. Taking the classification of MNIST as an example,
 a simple single-layer ANN network is as follows:
 
 .. code-block:: python
-   :emphasize-lines: 4
+    :emphasize-lines: 4
 
-   net = nn.Sequential(
-       nn.Flatten(),
-       nn.Linear(28 * 28, 10, bias=False),
-       nn.Softmax()
-       )
+    net = nn.Sequential(
+        nn.Flatten(),
+        nn.Linear(28 * 28, 10, bias=False),
+        nn.Softmax()
+        )
 
 We can also use SNN with a completely similar structure for classification tasks. As far as this network is concerned,
 we only need to remove all the activation functions first, and then add the neurons to the original activation
 function position. Here we choose the LIF neuron:
 
 .. code-block:: python
-   :emphasize-lines: 4
+    :emphasize-lines: 4
 
-   net = nn.Sequential(
-       nn.Flatten(),
-       nn.Linear(28 * 28, 10, bias=False),
-       neuron.LIFNode(tau=tau)
-       )
+    net = nn.Sequential(
+        nn.Flatten(),
+        nn.Linear(28 * 28, 10, bias=False),
+        neuron.LIFNode(tau=tau)
+        )
 
 Among them, the membrane potential decay constant :math:`\tau`  needs to be set by the parameter ``tau``.
 
@@ -49,58 +50,75 @@ The optimizer uses Adam and Poisson encoder to perform spike encoding every time
 
 .. code-block:: python
 
-   # Use Adam optimizer
-   optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate)
-   # Use Poisson encoder
-   encoder = encoding.PoissonEncoder()
+    # Use Adam optimizer
+    optimizer = torch.optim.Adam(net.parameters(), lr=lr)
+    # Use Poisson encoder
+    encoder = encoding.PoissonEncoder()
 
 The writing of training code needs to follow the following three points:
 
 1. The output of the spiking neuron is binary, and directly using the result of a single run for classification is
-very susceptible to interference. Therefore, it is generally considered that the output of the spike network is
-the \ **firing** \frequency (or firing rate) of the output layer over a period of time, and the firing rate indicates the
-response strength of the category. Therefore, the network needs to run for a period of time, that is, the \ **average
-distribution rate** \ after ``T`` time is used as the classification basis.
+   very susceptible to interference. Therefore, it is generally considered that the output of the spike network is
+   the \ **firing** \ frequency (or firing rate) of the output layer over a period of time, and the firing rate indicates the
+   response strength of the category. Therefore, the network needs to run for a period of time, that is, the \ **average distribution rate** \
+   after ``T`` time is used as the classification basis.
 
-2. The desired result we hope is that except for the correct neuron firing the \ **highest frequency**\, the other neurons
-\ **remain silent**\. Cross-entropy loss or MSE loss is often used, and here we use MSE loss which have a better actual effect.
+2. The desired result we hope is that except for the correct neuron firing the \ **highest frequency**\ , the other neurons \ **remain silent**\ .
+   Cross-entropy loss or MSE loss is often used, and here we use MSE loss which have a better actual effect.
 
-3. After each network simulation is over, the network status needs to be \ **reset**\.
+3. After each network simulation is over, the network status needs to be \ **reset**\ .
 
 Combining the above three points, the code of training loop is as follows:
 
 .. code-block:: python
 
-   for img, label in train_data_loader:
-       img = img.to(device)
-       label = label.to(device)
-       label_one_hot = F.one_hot(label, 10).float()
-
-       optimizer.zero_grad()
-
-       # Run time of T，out_spikes_counter is the tensor of shape=[batch_size, 10]
-       # Record the number of spike firings of 10 neurons in the output layer during the entire simulation duration
-       for t in range(T):
-           if t == 0:
-               out_spikes_counter = net(encoder(img).float())
-           else:
-               out_spikes_counter += net(encoder(img).float())
-
-       # out_spikes_counter / T Obtain the spike firing frequency of 10 neurons in the output layer during the simulation time
-       out_spikes_counter_frequency = out_spikes_counter / T
-
-       # The loss function is the spike firing frequency of the neurons in the output layer, and the MSE of the true category
-       # Such a loss function will make the spike firing frequency of the i-th neuron in the output layer approach 1 when the category i is input, and the spike firing frequency of other neurons will approach 0
-       loss = F.mse_loss(out_spikes_counter_frequency, label_one_hot)
-       loss.backward()
-       optimizer.step()
-       # After optimizing the parameters once, the state of the network needs to be reset, because the neurons of SNN have "memory"
-       functional.reset_net(net)
+    print("Epoch {}:".format(epoch))
+    print("Training...")
+    train_correct_sum = 0
+    train_sum = 0
+    net.train()
+    for img, label in tqdm(train_data_loader):
+        img = img.to(device)
+        label = label.to(device)
+        label_one_hot = F.one_hot(label, 10).float()
+
+        optimizer.zero_grad()
+
+        # Run for T durations, out_spikes_counter is a tensor with shape=[batch_size, 10]
+        # Record the number of spikes delivered by the 10 neurons in the output layer during the entire simulation duration
+        for t in range(T):
+            if t == 0:
+                out_spikes_counter = net(encoder(img).float())
+            else:
+                out_spikes_counter += net(encoder(img).float())
+
+        # out_spikes_counter / T # Obtain the firing frequency of 10 neurons in the output layer within the simulation duration
+        out_spikes_counter_frequency = out_spikes_counter / T
+
+        # The loss function is the firing frequency of the neurons in the output layer, and the MSE of the real class
+        # Such a loss function causes that when the category i is input, the firing frequency of the i-th neuron in the output layer approaches 1, while the firing frequency of other neurons approaches 0.
+        loss = F.mse_loss(out_spikes_counter_frequency, label_one_hot)
+        loss.backward()
+        optimizer.step()
+        # After optimizing the parameters once, the state of the network needs to be reset, because the SNN neurons have "memory"
+        functional.reset_net(net)
+
+        # Calculation of accuracy. The index of the neuron with max frequency in the output layer is the classification result.
+        train_correct_sum += (out_spikes_counter_frequency.max(1)[1] == label.to(device)).float().sum().item()
+        train_sum += label.numel()
+
+        train_batch_accuracy = (out_spikes_counter_frequency.max(1)[1] == label.to(device)).float().mean().item()
+        writer.add_scalar('train_batch_accuracy', train_batch_accuracy, train_times)
+        train_accs.append(train_batch_accuracy)
+
+        train_times += 1
+    train_accuracy = train_correct_sum / train_sum
 
 The complete code is located in ``clock_driven.examples.lif_fc_mnist.py``. In the code, we also use Tensorboard to
 save training logs. You can run it directly on the command line:
 
-.. code:: shell
+.. code-block:: shell
+
     $ python <PATH>/lif_fc_mnist.py --help
     usage: lif_fc_mnist.py [-h] [--device DEVICE] [--dataset-dir DATASET_DIR] [--log-dir LOG_DIR] [-b BATCH_SIZE] [-T T] [--lr LR] [--gpu GPU]
                         [--tau TAU] [-N EPOCH]
@@ -143,7 +161,7 @@ Select the first picture in the test set:
 
 Use the trained model to classify and get the classification result.
 
-.. code-block:: python
+.. code-block:: shell
 
    Firing rate: [[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]]
 
diff --git a/docs/source/clock_driven_en/4_conv_fashion_mnist.rst b/docs/source/clock_driven_en/4_conv_fashion_mnist.rst
index 3387999a..1a51a9da 100644
--- a/docs/source/clock_driven_en/4_conv_fashion_mnist.rst
+++ b/docs/source/clock_driven_en/4_conv_fashion_mnist.rst
@@ -1,10 +1,11 @@
 Clock driven: Use convolutional SNN to identify Fashion-MNIST
 =============================================================================================
+
 Author: `fangwei123456 <https://github.com/fangwei123456>`_
 
 Translator: `YeYumin <https://github.com/YEYUMIN>`_
 
-In this tutorial, we will build a convolutional spike neural network to classify the `Fashion-MNIST <https://github.com/zalandoresearch/fashion-mnist>`_ dataset.
+In this tutorial, we will build a convolutional spike neural network to classify the `Fashion-MNIST <https://github.com/zalandoresearch/fashion-mnist>`__ dataset.
 The Fashion-MNIST dataset has the same format as the MNIST dataset, and both are ``1 * 28 * 28`` grayscale images.
 
 Network structure
@@ -42,15 +43,15 @@ Then we add convolutional layers and a fully-connected layers to ``PythonNet``.
 .. code-block:: python
 
     self.conv = nn.Sequential(
-            nn.Conv2d(1, 128, kernel_size=3, padding=1, bias=False),
-            nn.BatchNorm2d(128),
-            neuron.IFNode(surrogate_function=surrogate.ATan()),
-            nn.MaxPool2d(2, 2),  # 14 * 14
-
-            nn.Conv2d(128, 128, kernel_size=3, padding=1, bias=False),
-            nn.BatchNorm2d(128),
-            neuron.IFNode(surrogate_function=surrogate.ATan()),
-            nn.MaxPool2d(2, 2)  # 7 * 7
+        nn.Conv2d(1, 128, kernel_size=3, padding=1, bias=False),
+        nn.BatchNorm2d(128),
+        neuron.IFNode(surrogate_function=surrogate.ATan()),
+        nn.MaxPool2d(2, 2),  # 14 * 14
+
+        nn.Conv2d(128, 128, kernel_size=3, padding=1, bias=False),
+        nn.BatchNorm2d(128),
+        neuron.IFNode(surrogate_function=surrogate.ATan()),
+        nn.MaxPool2d(2, 2)  # 7 * 7
         )
 
 The input with ``shape=[N, 1, 28, 28]`` will be converted to spikes with ``shape=[N, 128, 7, 7]``.
@@ -166,7 +167,7 @@ Training network
 ----------------------------
 The complete codes are available at :class:`spikingjelly.clock_driven.examples.conv_fashion_mnist`. The tarining arguments are:
 
-.. code-block:: bash
+.. code-block:: shell
 
     Classify Fashion-MNIST
 
@@ -194,7 +195,7 @@ The complete codes are available at :class:`spikingjelly.clock_driven.examples.c
 The checkpoint will be saved in the same level directory of the ``tensorboard`` log file. The server for training this
 network uses `Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz` CPU and `GeForce RTX 2080 Ti` GPU.
 
-.. code-block:: bash
+.. code-block:: shell
 
     (pytorch-env) root@e8b6e4800dae4011eb0918702bd7ddedd51c-fangw1598-0:/# python -m spikingjelly.clock_driven.examples.conv_fashion_mnist -opt SGD -data_dir /userhome/datasets/FashionMNIST/ -amp
 
@@ -259,7 +260,7 @@ After running 100 rounds of training, the correct rates on the training batch an
 
 After training for 64 epochs, the highest test set accuracy rate can reach 93.3%, which is a very good accuracy for
 SNN. It is only slightly lower than ResNet18 (93.3%) with Normalization, random horizontal flip, random vertical flip,
-random translation and random rotation in the BenchMark `Fashion-MNIST <https://github.com/zalandoresearch/fashion-mnist>`_.
+random translation and random rotation in the BenchMark `Fashion-MNIST <https://github.com/zalandoresearch/fashion-mnist>`__.
 
 Visual Encoder
 ------------------------------------
@@ -279,6 +280,7 @@ As we said in the above text, the first spike neurons layer (SN) and the layers
             self.conv = nn.Sequential(
                 neuron.IFNode(surrogate_function=surrogate.ATan()),
             ...
+            )
 
 Now let's take a look at the output spikes of the trained encoder. Let's create a new python file, import related
 modules, and redefine a data loader with ``batch_size=1``, because we want to view pictures one by one:
diff --git a/docs/source/clock_driven_en/7_a2c_cart_pole.rst b/docs/source/clock_driven_en/7_a2c_cart_pole.rst
index fe1a65c2..d83c0a7e 100644
--- a/docs/source/clock_driven_en/7_a2c_cart_pole.rst
+++ b/docs/source/clock_driven_en/7_a2c_cart_pole.rst
@@ -12,7 +12,7 @@ We set the firing threshold of a neuron to be infinity, which won't fire at all,
 
 .. code-block:: python
 
-        class NonSpikingLIFNode(neuron.LIFNode):
+    class NonSpikingLIFNode(neuron.LIFNode):
         def forward(self, dv: torch.Tensor):
             self.neuronal_charge(dv)
             # self.neuronal_fire()
diff --git a/docs/source/clock_driven_en/9_spikingLSTM_text.rst b/docs/source/clock_driven_en/9_spikingLSTM_text.rst
index 4a417ebb..02c00808 100644
--- a/docs/source/clock_driven_en/9_spikingLSTM_text.rst
+++ b/docs/source/clock_driven_en/9_spikingLSTM_text.rst
@@ -177,7 +177,7 @@ After training, we will save the final state of the network for testing, and als
 
 We will observe the following results when executing ``%run ./spiking_lstm_text.py`` in Python Console with ``IF_TRAIN = 1`` .
 
-.. code-block:: python
+.. code-block:: shell
 
     Backend Qt5Agg is interactive backend. Turning interactive mode on.
     Training...
@@ -274,7 +274,7 @@ We first load the well-trained network, and then conduct the following tests:
 
 We will observe the following results when executing ``%run ./spiking_lstm_text.py`` in Python Console with ``IF_TRAIN = 0`` .
 
-.. code-block:: python
+.. code-block:: shell
 
     Testing...
     Calculating testing accuracy...
diff --git a/docs/source/tutorial.clock_driven.rst b/docs/source/tutorial.clock_driven.rst
index 83f85166..f2564011 100644
--- a/docs/source/tutorial.clock_driven.rst
+++ b/docs/source/tutorial.clock_driven.rst
@@ -52,7 +52,7 @@ SNN之于RNN
 重置表示电压重置过程：发放脉冲，则电压重置为 :math:`V_{reset}`；没有发放脉冲，则电压不变。
 
 梯度替代法
--------------
+----------
 RNN使用可微分的门控函数，例如tanh函数。而SNN的脉冲函数 :math:`g(x)=\Theta(x)` 显然是不可微分的，这就导致了SNN虽然一定程度上\
 与RNN非常相似，但不能用梯度下降、反向传播来训练。但我们可以用一个形状与 :math:`g(x)=\Theta(x)` 非常相似，但可微分的门控函数\
 :math:`\sigma(x)` 去替换它。
@@ -70,21 +70,31 @@ RNN使用可微分的门控函数，例如tanh函数。而SNN的脉冲函数 :ma
 
 .. code-block:: python
 
-    class BaseNode(nn.Module):
-        def __init__(self, v_threshold=1.0, v_reset=0.0, surrogate_function=surrogate.Sigmoid(), monitor_state=False):
-            '''
+    class BaseNode(base.MemoryModule):
+        def __init__(self, v_threshold: float = 1., v_reset: float = 0.,
+                    surrogate_function: Callable = surrogate.Sigmoid(), detach_reset: bool = False):
+            """
             :param v_threshold: 神经元的阈值电压
-            :param v_reset: 神经元的重置电压。如果不为None，当神经元释放脉冲后，电压会被重置为v_reset；如果设置为None，则电压会被减去阈值
+            :type v_threshold: float
+
+            :param v_reset: 神经元的重置电压。如果不为 ``None``，当神经元释放脉冲后，电压会被重置为 ``v_reset``；
+                如果设置为 ``None``，则电压会被减去 ``v_threshold``
+            :type v_reset: float
+
             :param surrogate_function: 反向传播时用来计算脉冲函数梯度的替代函数
-            :param monitor_state: 是否设置监视器来保存神经元的电压和释放的脉冲。
-                            若为True，则self.monitor是一个字典，键包括'v'和's'，分别记录电压和输出脉冲。对应的值是一个链表。为了节省显存（内存），列表中存入的是原始变量
-                            转换为numpy数组后的值。还需要注意，self.reset()函数会清空这些链表
+            :type surrogate_function: Callable
+
+            :param detach_reset: 是否将reset过程的计算图分离
+            :type detach_reset: bool
+
+            可微分SNN神经元的基类神经元。
+            """
 
 如果想要自定义新的近似门控函数，可以参考 ``clock_driven.surrogate`` 中的代码实现。通常是定义 ``torch.autograd.Function``，然后\
 将其封装成一个 ``torch.nn.Module`` 的子类。
 
 将脉冲神经元嵌入到深度网络
-------------------------
+--------------------------
 解决了脉冲神经元的微分问题后，我们的脉冲神经元可以像激活函数那样，嵌入到使用PyTorch搭建的任意网络中，使得网络成为一个SNN。在 ``clock_driven.neuron`` 中\
 已经实现了一些经典神经元，可以很方便地搭建各种网络，例如一个简单的全连接网络：\
 
@@ -95,50 +105,75 @@ RNN使用可微分的门控函数，例如tanh函数。而SNN的脉冲函数 :ma
             neuron.LIFNode(tau=100.0, v_threshold=1.0, v_reset=5.0)
             )
 
-使用双层全连接网络进行MNIST分类
------------------------------
-现在我们使用 ``clock_driven.neuron`` 中的LIF神经元，搭建一个双层全连接网络，对MNIST数据集进行分类。
+示例：使用单层全连接网络进行MNIST分类
+-------------------------------------
+现在我们使用 ``clock_driven.neuron`` 中的LIF神经元，搭建一个单层全连接网络，对MNIST数据集进行分类。
 
-首先定义我们的网络结构：
+首先确定所需超参数：
 
 .. code-block:: python
 
-    class Net(nn.Module):
-        def __init__(self, tau=100.0, v_threshold=1.0, v_reset=0.0):
-            super().__init__()
-            # 网络结构，简单的双层全连接网络，每一层之后都是LIF神经元
-            self.fc = nn.Sequential(
-                nn.Flatten(),
-                nn.Linear(28 * 28, 14 * 14, bias=False),
-                neuron.LIFNode(tau=tau, v_threshold=v_threshold, v_reset=v_reset),
-                nn.Linear(14 * 14, 10, bias=False),
-                neuron.LIFNode(tau=tau, v_threshold=v_threshold, v_reset=v_reset)
-            )
+    parser.add_argument('--device', default='cuda:0', help='运行的设备，例如“cpu”或“cuda:0”\n Device, e.g., "cpu" or "cuda:0"')
+
+    parser.add_argument('--dataset-dir', default='./', help='保存MNIST数据集的位置，例如“./”\n Root directory for saving MNIST dataset, e.g., "./"')
+    parser.add_argument('--log-dir', default='./', help='保存tensorboard日志文件的位置，例如“./”\n Root directory for saving tensorboard logs, e.g., "./"')
+    parser.add_argument('--model-output-dir', default='./', help='模型保存路径，例如“./”\n Model directory for saving, e.g., "./"')
+
+    parser.add_argument('-b', '--batch-size', default=64, type=int, help='Batch 大小，例如“64”\n Batch size, e.g., "64"')
+    parser.add_argument('-T', '--timesteps', default=100, type=int, dest='T', help='仿真时长，例如“100”\n Simulating timesteps, e.g., "100"')
+    parser.add_argument('--lr', '--learning-rate', default=1e-3, type=float, metavar='LR', help='学习率，例如“1e-3”\n Learning rate, e.g., "1e-3": ', dest='lr')
+    parser.add_argument('--tau', default=2.0, type=float, help='LIF神经元的时间常数tau，例如“100.0”\n Membrane time constant, tau, for LIF neurons, e.g., "100.0"')
+    parser.add_argument('-N', '--epoch', default=100, type=int, help='训练epoch，例如“100”\n Training epoch, e.g., "100"')
 
-        def forward(self, x):
-            return self.fc(x)
+初始化数据加载器：
 
-定义我们的超参数：
+.. code-block:: python
+
+    # 初始化数据加载器
+    train_dataset = torchvision.datasets.MNIST(
+        root=dataset_dir,
+        train=True,
+        transform=torchvision.transforms.ToTensor(),
+        download=True
+    )
+    test_dataset = torchvision.datasets.MNIST(
+        root=dataset_dir,
+        train=False,
+        transform=torchvision.transforms.ToTensor(),
+        download=True
+    )
+
+    train_data_loader = data.DataLoader(
+        dataset=train_dataset,
+        batch_size=batch_size,
+        shuffle=True,
+        drop_last=True
+    )
+    test_data_loader = data.DataLoader(
+        dataset=test_dataset,
+        batch_size=batch_size,
+        shuffle=False,
+        drop_last=False
+    )
+
+定义并初始化网络：
 
 .. code-block:: python
 
-    device = input('输入运行的设备，例如“cpu”或“cuda:0”\n input device, e.g., "cpu" or "cuda:0": ')
-    dataset_dir = input('输入保存MNIST数据集的位置，例如“./”\n input root directory for saving MNIST dataset, e.g., "./": ')
-    batch_size = int(input('输入batch_size，例如“64”\n input batch_size, e.g., "64": '))
-    learning_rate = float(input('输入学习率，例如“1e-3”\n input learning rate, e.g., "1e-3": '))
-    T = int(input('输入仿真时长，例如“100”\n input simulating steps, e.g., "100": '))
-    tau = float(input('输入LIF神经元的时间常数tau，例如“100.0”\n input membrane time constant, tau, for LIF neurons, e.g., "100.0": '))
-    train_epoch = int(input('输入训练轮数，即遍历训练集的次数，例如“100”\n input training epochs, e.g., "100": '))
-    log_dir = input('输入保存tensorboard日志文件的位置，例如“./”\n input root directory for saving tensorboard logs, e.g., "./": ')
+    # 定义并初始化网络
+    net = nn.Sequential(
+        nn.Flatten(),
+        nn.Linear(28 * 28, 10, bias=False),
+        neuron.LIFNode(tau=tau)
+    )
+    net = net.to(device)
 
-初始化数据加载器、网络、优化器，以及编码器（我们使用泊松编码器，将MNIST图像编码成脉冲序列）：
+初始化优化器、编码器（我们使用泊松编码器，将MNIST图像编码成脉冲序列）：
 
 .. code-block:: python
 
-    # 初始化网络
-    net = Net(tau=tau).to(device)
     # 使用Adam优化器
-    optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate)
+    optimizer = torch.optim.Adam(net.parameters(), lr=lr)
     # 使用泊松编码器
     encoder = encoding.PoissonEncoder()
 
@@ -150,8 +185,13 @@ RNN使用可微分的门控函数，例如tanh函数。而SNN的脉冲函数 :ma
 这可以通过调用 ``clock_driven.functional.reset_net(net)`` 来实现。训练的代码如下：
 
 .. code-block:: python
-
-    for img, label in train_data_loader:
+    
+    print("Epoch {}:".format(epoch))
+    print("Training...")
+    train_correct_sum = 0
+    train_sum = 0
+    net.train()
+    for img, label in tqdm(train_data_loader):
         img = img.to(device)
         label = label.to(device)
         label_one_hot = F.one_hot(label, 10).float()
@@ -177,16 +217,28 @@ RNN使用可微分的门控函数，例如tanh函数。而SNN的脉冲函数 :ma
         # 优化一次参数后，需要重置网络的状态，因为SNN的神经元是有“记忆”的
         functional.reset_net(net)
 
+        # 正确率的计算方法如下。认为输出层中脉冲发放频率最大的神经元的下标i是分类结果
+        train_correct_sum += (out_spikes_counter_frequency.max(1)[1] == label.to(device)).float().sum().item()
+        train_sum += label.numel()
+
+        train_batch_accuracy = (out_spikes_counter_frequency.max(1)[1] == label.to(device)).float().mean().item()
+        writer.add_scalar('train_batch_accuracy', train_batch_accuracy, train_times)
+        train_accs.append(train_batch_accuracy)
+
+        train_times += 1
+    train_accuracy = train_correct_sum / train_sum
+
 测试的代码与训练代码相比更为简单：
 
 .. code-block:: python
 
+    print("Testing...")
     net.eval()
     with torch.no_grad():
         # 每遍历一次全部数据集，就在测试集上测试一次
         test_sum = 0
         correct_sum = 0
-        for img, label in test_data_loader:
+        for img, label in tqdm(test_data_loader):
             img = img.to(device)
             for t in range(T):
                 if t == 0:
@@ -197,40 +249,73 @@ RNN使用可微分的门控函数，例如tanh函数。而SNN的脉冲函数 :ma
             correct_sum += (out_spikes_counter.max(1)[1] == label.to(device)).float().sum().item()
             test_sum += label.numel()
             functional.reset_net(net)
+        test_accuracy = correct_sum / test_sum
+        writer.add_scalar('test_accuracy', test_accuracy, epoch)
+        test_accs.append(test_accuracy)
+        max_test_accuracy = max(max_test_accuracy, test_accuracy)
+    print("Epoch {}: train_acc={}, test_acc={}, max_test_acc={}, train_times={}".format(epoch, train_accuracy, test_accuracy, max_test_accuracy, train_times))
+    print()
+
+完整的代码位于 ``clock_driven.examples.lif_fc_mnist.py``，在代码中我们还使用了Tensorboard来保存训练日志。
+可设置的（超）参数如下：
+
+.. code-block:: shell
+
+    $ python <PATH>/lif_fc_mnist.py --help
+    usage: lif_fc_mnist.py [-h] [--device DEVICE] [--dataset-dir DATASET_DIR] [--log-dir LOG_DIR] [--model-output-dir MODEL_OUTPUT_DIR] [-b BATCH_SIZE] [-T T] [--lr LR] [--tau TAU] [-N EPOCH]
+
+    spikingjelly LIF MNIST Training
+
+    optional arguments:
+    -h, --help            show this help message and exit
+    --device DEVICE       运行的设备，例如“cpu”或“cuda:0” Device, e.g., "cpu" or "cuda:0"
+    --dataset-dir DATASET_DIR
+                            保存MNIST数据集的位置，例如“./” Root directory for saving MNIST dataset, e.g., "./"
+    --log-dir LOG_DIR     保存tensorboard日志文件的位置，例如“./” Root directory for saving tensorboard logs, e.g., "./"
+    --model-output-dir MODEL_OUTPUT_DIR
+                            模型保存路径，例如“./” Model directory for saving, e.g., "./"
+    -b BATCH_SIZE, --batch-size BATCH_SIZE
+                            Batch 大小，例如“64” Batch size, e.g., "64"
+    -T T, --timesteps T   仿真时长，例如“100” Simulating timesteps, e.g., "100"
+    --lr LR, --learning-rate LR
+                            学习率，例如“1e-3” Learning rate, e.g., "1e-3":
+    --tau TAU             LIF神经元的时间常数tau，例如“100.0” Membrane time constant, tau, for LIF neurons, e.g., "100.0"
+    -N EPOCH, --epoch EPOCH
+                            训练epoch，例如“100” Training epoch, e.g., "100"
+
+也可以直接在Python命令行运行它：
+
+.. code-block:: shell
+
+    $ python
+    >>> import spikingjelly.clock_driven.examples.lif_fc_mnist as lif_fc_mnist
+    >>> lif_fc_mnist.main()
+    ########## Configurations ##########
+    device=cuda:0
+    dataset_dir=./
+    log_dir=./
+    model_output_dir=./
+    batch_size=64
+    T=100
+    lr=0.001
+    tau=2.0
+    epoch=100
+    ####################################
+    Epoch 0:
+    Training...
+    100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 937/937 [01:26<00:00, 10.89it/s]
+    Testing...
+    100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:05<00:00, 28.79it/s]
+    Epoch 0: train_acc = 0.8641775613660619, test_acc=0.9071, max_test_acc=0.9071, train_times=937
+
+保存和读取模型：
 
-        writer.add_scalar('test_accuracy', correct_sum / test_sum, epoch)
-
-完整的代码位于 ``clock_driven.examples.lif_fc_mnist.py``，在代码中我们还使用了Tensorboard来保存训练日志。可以直接在Python命令行运行它：
-
-    .. code-block:: python
-
-        >>> import spikingjelly.clock_driven.examples.lif_fc_mnist as lif_fc_mnist
-        >>> lif_fc_mnist.main()
-        输入运行的设备，例如“cpu”或“cuda:0”
-         input device, e.g., "cpu" or "cuda:0": cuda:15
-        输入保存MNIST数据集的位置，例如“./”
-         input root directory for saving MNIST dataset, e.g., "./": ./mnist
-        输入batch_size，例如“64”
-         input batch_size, e.g., "64": 128
-        输入学习率，例如“1e-3”
-         input learning rate, e.g., "1e-3": 1e-3
-        输入仿真时长，例如“100”
-         input simulating steps, e.g., "100": 50
-        输入LIF神经元的时间常数tau，例如“100.0”
-         input membrane time constant, tau, for LIF neurons, e.g., "100.0": 100.0
-        输入训练轮数，即遍历训练集的次数，例如“100”
-         input training epochs, e.g., "100": 100
-        输入保存tensorboard日志文件的位置，例如“./”
-         input root directory for saving tensorboard logs, e.g., "./": ./logs_lif_fc_mnist
-        cuda:15 ./mnist 128 0.001 50 100.0 100 ./logs_lif_fc_mnist
-        train_times 0 train_accuracy 0.109375
-        cuda:15 ./mnist 128 0.001 50 100.0 100 ./logs_lif_fc_mnist
-        train_times 1024 train_accuracy 0.5078125
-        cuda:15 ./mnist 128 0.001 50 100.0 100 ./logs_lif_fc_mnist
-        train_times 2048 train_accuracy 0.7890625
-        ...
-        cuda:15 ./mnist 128 0.001 50 100.0 100 ./logs_lif_fc_mnist
-        train_times 46080 train_accuracy 0.9296875
+.. code-block:: python
+    
+    # 保存模型
+    torch.save(net, model_output_dir + "/lif_snn_mnist.ckpt")
+    # 读取模型
+    # net = torch.load(model_output_dir + "/lif_snn_mnist.ckpt")
 
 需要注意的是，训练这样的SNN，所需显存数量与仿真时长 ``T`` 线性相关，更长的 ``T`` 相当于使用更小的仿真步长，训练更为“精细”，\
 但训练效果不一定更好，因此 ``T`` 太大，SNN在时间上展开后就会变成一个非常深的网络，梯度的传递容易衰减或爆炸。由于我们使用了泊松\
@@ -242,4 +327,4 @@ RNN使用可微分的门控函数，例如tanh函数。而SNN的脉冲函数 :ma
 
 
 最终达到大约92%的测试集正确率，这并不是一个很高的正确率，因为我们使用了非常简单的网络结构，以及泊松编码器。我们完全可以去掉泊松\
-编码器，将图像直接送入SNN，在这种情况下，首层LIF神经元可以被视为编码器。
\ No newline at end of file
+编码器，将图像直接送入SNN，在这种情况下，首层LIF神经元可以被视为编码器。
diff --git a/docs/source/tutorial.event_driven.rst b/docs/source/tutorial.event_driven.rst
index 0f5ba5b8..7d3c8e70 100644
--- a/docs/source/tutorial.event_driven.rst
+++ b/docs/source/tutorial.event_driven.rst
@@ -1,11 +1,13 @@
 事件驱动
 =======================================
+
 本教程作者： `fangwei123456 <https://github.com/fangwei123456>`_
 
-本节教程主要关注 ``spikingjelly.event_driven``，介绍事件驱动概念、Tempotron神经元。
+本节教程主要关注 ``spikingjelly.event_driven`` ，介绍事件驱动概念、Tempotron神经元。
 
 事件驱动的SNN仿真
 -----------------
+
 ``clock_driven`` 使用时间驱动的方法对SNN进行仿真，因此在代码中都能够找到在时间上的循环，例如：
 
 .. code-block:: python
@@ -20,13 +22,13 @@
 可以异步计算，不需要在时钟上保持同步。
 
 脉冲响应模型(Spike response model, SRM)
---------------------------------------
+-----------------------------------------------
 
 在脉冲响应模型(Spike response model, SRM)中，使用显式的 :math:`V-t` 方程来描述神经元的活动，而不是用微分方程去描述神经元的充\
 电过程。由于 :math:`V-t` 是已知的，因此给与任何输入 :math:`X(t)`，神经元的响应 :math:`V(t)` 都可以被直接算出。
 
 Tempotron神经元
----------------
+---------------------
 
 Tempotron神经元是 [#f1]_ 提出的一种SNN神经元，其命名来源于ANN中的感知器（Perceptron）。感知器是最简单的ANN神经元，对输入数据\
 进行加权求和，输出二值0或1来表示数据的分类结果。Tempotron可以看作是SNN领域的感知器，它同样对输入数据进行加权求和，并输出二分类\
@@ -66,7 +68,8 @@ Tempotron的膜电位定义为：
 从Tempotron的输出结果也能看出，Tempotron只能发放不超过1个脉冲。单个Tempotron只能做二分类，但多个Tempotron就可以做多分类。
 
 如何训练Tempotron
------------------
+--------------------
+
 使用Tempotron的SNN网络，通常是“全连接层 + Tempotron”的形式，网络的参数即为全连接层的权重。使用梯度下降法来优化网络参数。
 
 以二分类为例，损失函数被定义为仅在分类错误的情况下存在。当实际类别是1而实际输出是0，损失为 :math:`V_{threshold} - V_{t_{max}}`;\
@@ -86,19 +89,22 @@ Tempotron的膜电位定义为：
 
 并行实现
 --------
+
 如前所述，对于脉冲响应模型，一旦输入给定，神经元的响应方程已知，任意时刻的神经元状态都可以求解。此外，计算 :math:`t` 时刻的电\
 压值，并不需要依赖于 :math:`t-1` 时刻的电压值，因此不同时刻的电压值完全可以并行求解。在 ``spikingjelly/event_driven/neuron.py`` 中\
 实现了集成全连接层、并行计算的Tempotron，将时间看作是一个单独的维度，整个网络在 :math:`t=0, 1, ..., T-1` 时刻的状态全都被并
 行地计算出。读者如有兴趣可以直接阅读源代码。
 
-识别MNIST
----------
-我们使用Tempotron搭建一个简单的SNN网络，识别MNIST数据集。首先我们需要考虑如何将MNIST数据集转化为脉冲输入。在 ``clock_driven``中\
+示例：识别MNIST
+---------------
+
+我们使用Tempotron搭建一个简单的SNN网络，识别MNIST数据集。首先我们需要考虑如何将MNIST数据集转化为脉冲输入。在 ``clock_driven`` 中\
 的泊松编码器，在伴随着整个网络的for循环中，不断地生成脉冲；但在使用Tempotron时，我们使用高斯调谐曲线编码器 [#f2]_，这一编码器\
 可以在时间维度上并行地将输入数据转化为脉冲发放时刻。
 
 高斯调谐曲线编码器
-^^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
 假设我们要编码的数据有 :math:`n` 个特征，对于MNIST图像，因其是单通道图像，可以认为 :math:`n=1`。高斯调谐曲线编码器，使\
 用 :math:`m (m>2)` 个神经元去编码每个特征，并将每个特征编码成这 :math:`m` 个神经元的脉冲发放时刻，因此可以认为编码器内\
 共有 :math:`nm` 个神经元。
@@ -129,7 +135,7 @@ Tempotron的膜电位定义为：
 .. image:: ./_static/tutorials/event_driven/1.png
 
 定义网络、损失函数、分类结果
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 网络的结构非常简单，单层的Tempotron，输出层是10个神经元，因为MNIST图像共有10类：
 
@@ -139,7 +145,8 @@ Tempotron的膜电位定义为：
         def __init__(self, m, T):
             # m是高斯调谐曲线编码器编码一个像素点所使用的神经元数量
             super().__init__()
-            self.tempotron = neuron.Tempotron(784*m, 10, T)
+            self.tempotron = neuron.Tempotron(28*28*m, 10, T)     # mnist 28*28=784
+        
         def forward(self, x: torch.Tensor):
             # 返回的是输出层10个Tempotron在仿真时长内的电压峰值
             return self.tempotron(x, 'v_max')
@@ -148,7 +155,7 @@ Tempotron的膜电位定义为：
 
 .. code-block:: python
 
-    train_acc = (v_max.argmax(dim=1) == label.to(device)).float().mean().item()
+    train_batch_accuracy = (out_spikes_counter_frequency.max(1)[1] == label.to(device)).float().mean().item()
 
 我们使用的损失函数与 [#f1]_ 中的类似，但所有不同。对于分类错误的神经元，误差为其峰值电压与阈值电压之差的平方，损失函数可以\
 在 ``event_driven.neuron`` 中找到源代码：
@@ -172,38 +179,52 @@ Tempotron的膜电位定义为：
 
 下面我们直接运行代码。完整的源代码位于 ``spikingjelly/event_driven/examples/tempotron_mnist.py``：
 
-.. code-block:: python
+.. code-block:: shell
 
+    $ python
     >>> import spikingjelly.event_driven.examples.tempotron_mnist as tempotron_mnist
     >>> tempotron_mnist.main()
-    输入运行的设备，例如“cpu”或“cuda:0”
-     input device, e.g., "cpu" or "cuda:0": cuda:5
-    输入保存MNIST数据集的位置，例如“./”
-     input root directory for saving MNIST dataset, e.g., "./": ./mnist
-    输入batch_size，例如“64”
-     input batch_size, e.g., "64": 64
-    输入学习率，例如“1e-3”
-     input learning rate, e.g., "1e-3": 1e-3
-    输入仿真时长，例如“100”
-     input simulating steps, e.g., "100": 10
-    输入训练轮数，即遍历训练集的次数，例如“100”
-     input training epochs, e.g., "100": 100
-    输入使用高斯调谐曲线编码每个像素点使用的神经元数量，例如“16”
-     input neuron number for encoding a piexl in GaussianTuning encoder, e.g., "16": 16
-    输入保存tensorboard日志文件的位置，例如“./”
-     input root directory for saving tensorboard logs, e.g., "./": ./logs
+    ########## Configurations ##########
+    device=cuda:0
+    dataset_dir=./
+    log_dir=./
+    model_output_dir=./
+    batch_size=64
+    T=100
+    lr=0.001
+    epoch=100
+    m=16
+    ####################################
+    Epoch 0:
+    Training...
+    100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 937/937 [01:07<00:00, 13.91it/s]
+    Testing...
+    100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:10<00:00, 14.50it/s]
+    Epoch 0: train_acc = 0.49112860192102453, test_acc=0.6316, max_test_acc=0.6316, train_times=937
+
+保存和读取模型：
 
+.. code-block:: python
+    
+    # 保存模型
+    torch.save(net, model_output_dir + "/tempotron_snn_mnist.ckpt")
+    # 读取模型
+    # net = torch.load(model_output_dir + "/tempotron_snn_mnist.ckpt")
 
 查看训练结果
 ^^^^^^^^^^^^
+
 在Tesla K80上训练100个epoch，大约需要32分钟。训练时每个batch的正确率、测试集正确率的变化情况如下：
 
-.. image:: ./_static/examples/event_driven/tempotron_mnist/train.*
+.. image:: ./_static/examples/event_driven/tempotron_mnist/train_batch_acc_scale.svg
+    :width: 100%
+    
+
+.. image:: ./_static/examples/event_driven/tempotron_mnist/test_accuracy_scale.svg
+    :width: 100%
 
-.. image:: ./_static/examples/event_driven/tempotron_mnist/test.*
 
-测试集的正确率63.9%左右，可以看出Tempotron确实实现了类似ANN中感知器的功能，具有一定的分类能力。但是与主流的多层SNN相比，性能较差。
-随着训练的进行，测试集正确率不断下降，过拟合比较严重。
+训练100个Epoch，测试集的正确率为84.19%，可以看出Tempotron实现了感知器的功能，具有一定的分类能力。
 
 
 
diff --git a/docs/source/tutorial_en.clock_driven.rst b/docs/source/tutorial_en.clock_driven.rst
index 9de8512c..6e67bec5 100644
--- a/docs/source/tutorial_en.clock_driven.rst
+++ b/docs/source/tutorial_en.clock_driven.rst
@@ -11,7 +11,7 @@ Neftci E, Mostafa H, Zenke F, et al. Surrogate Gradient Learning in Spiking Neur
 The download address for this article can be found at `arXiv <https://arxiv.org/abs/1901.09948>`_ .
 
 SNN Compared with RNN
-----------
+---------------------
 The neuron in SNN can be regarded as a kind of RNN, and its input is the voltage increment (or the product of current and membrane resistance, but for convenience, ``clock_driven.neuron`` uses voltage increment). The hidden state is the membrane voltage, and the output is a spike. Such spiking neurons are Markovian: the output at the current time is only related to the input at the current time and the state of the neuron itself.
 
 You can use three discrete equations —— Charge, Discharge, Reset —— to describe any discrete spiking neuron:
@@ -49,7 +49,7 @@ In the Discharge equation, :math:`S(t)` is a spike fired by a neuron, :math:`g(x
 Reset means the reset process of the voltage: when a spike is fired, the voltage is reset to :math:`V_{reset}`; If no spike is fired, the voltage remains unchanged.
 
 Surrogate Gradient Method
--------------
+-------------------------
 RNN uses differentiable gating functions, such as the tanh function. Obviously, the spiking function of SNN :math:`g(x)=\Theta(x)` is not differentiable, which leads to the fact that SNN is very similar to RNN to a certain extent, but it cannot be trained by gradient descent and back-propagation. We can use a gating function that is very similar to :math:`g(x)=\Theta(x)` , but differentiable :math:`\sigma(x)` to replace it.
 
 The core idea of ​​this method is: when forwarding, using :math:`g(x)=\Theta(x)`, the output of the neuron is discrete 0 and 1, and our network is still SNN; When back-propagation, the gradient of the surrogate gradient function :math:`g'(x)=\sigma'(x)` is used to replace the gradient of the spiking function. The most common surrogate gradient function is the sigmoid function :math:`\sigma(\alpha x)=\frac{1}{1 + exp(-\alpha x)}`. :math:`\alpha` can control the smoothness of the function. The function with larger :math:`\alpha` will be closer to :math:`\Theta(x)`. But when it gets closer to :math:`x=0`, the gradient will be more likely to explode. And when it gets farther to :math:`x=0`, the gradient will be more likely to disappear. This makes the network more difficult to train. The following figure shows the shape of the surrogate gradient function and the corresponding Reset equation for different :math:`\alpha`:
@@ -61,18 +61,30 @@ The surrogate gradient function is one of the parameters of the neuron construct
 
 .. code-block:: python
 
-    class BaseNode(nn.Module):
-        def __init__(self, v_threshold=1.0, v_reset=0.0, surrogate_function=surrogate.Sigmoid(), monitor_state=False):
-            '''
-            :param v_threshold: The threshold voltage of the neuron
-            :param v_reset: The reset voltage of the neuron. If it is not None, when the neuron fires the spike, the voltage will be reset to v_reset; if it is set to None, the voltage will be subtracted from the threshold
-            :param surrogate_function: Surrogate function used to calculate the gradient of the spiking function during back-propagation
-            :param monitor_state: Whether to set up a monitor to save the voltage of the neurons and the spikes fired. If True, self.monitor is a dictionary, whose keys include 'v' and 's', recording voltage and output spike respectively. The corresponding value is a linked list. In order to save video memory (memory), what is stored in the list is the value of the original variable converted into a numpy array. Also note that the self.reset() function will clear these linked lists
+    class BaseNode(base.MemoryModule):
+        def __init__(self, v_threshold: float = 1., v_reset: float = 0.,
+                    surrogate_function: Callable = surrogate.Sigmoid(), detach_reset: bool = False):
+            """
+            :param v_threshold: threshold voltage of neurons
+            :type v_threshold: float
+
+            :param v_reset: reset voltage of neurons. If not ``None``, voltage of neurons that just fired spikes will be set to
+                ``v_reset``. If ``None``, voltage of neurons that just fired spikes will subtract ``v_threshold``
+            :type v_reset: float
+
+            :param surrogate_function: surrogate function for replacing gradient of spiking functions during back-propagation
+            :type surrogate_function: Callable
+
+            :param detach_reset: whether detach the computation graph of reset
+            :type detach_reset: bool
+
+            This class is the base class of differentiable spiking neurons.
+            """
 
 If you want to customize the new approximate gating function, you can refer to the code in ``clock_driven.surrogate``. Usually we define it as ``torch.autograd.Function``, and then encapsulate it into a subclass of ``torch.nn.Module``.
 
 Embed Spiking Neurons into Deep Networks
-------------------------
+----------------------------------------
 After solving the differential problem of spiking neurons, our spiking neurons can be embedded into any network built using PyTorch like an activation function, making the network an SNN. Some classic neurons have been implemented in ``clock_driven.neuron``, which can easily build various networks, such as a simple fully connected network:
 
 .. code-block:: python
@@ -82,50 +94,75 @@ After solving the differential problem of spiking neurons, our spiking neurons c
             neuron.LIFNode(tau=100.0, v_threshold=1.0, v_reset=5.0)
             )
 
-MNIST classification using a double-layer fully connected network
------------------------------
-Now we use the LIF neurons in ``clock_driven.neuron`` to build a two-layer fully connected network to classify the MNIST dataset.
+Example: MNIST classification using a single-layer fully connected network
+--------------------------------------------------------------------------
+Now we use the LIF neurons in ``clock_driven.neuron`` to build a one-layer fully connected network to classify the MNIST dataset.
 
-First we define our network structure:
+Firstly, we confirm hyperparameters we needed:
 
 .. code-block:: python
 
-    class Net(nn.Module):
-        def __init__(self, tau=100.0, v_threshold=1.0, v_reset=0.0):
-            super().__init__()
-            # Network structure, a simple two-layer fully connected network, each layer is followed by LIF neurons
-            self.fc = nn.Sequential(
-                nn.Flatten(),
-                nn.Linear(28 * 28, 14 * 14, bias=False),
-                neuron.LIFNode(tau=tau, v_threshold=v_threshold, v_reset=v_reset),
-                nn.Linear(14 * 14, 10, bias=False),
-                neuron.LIFNode(tau=tau, v_threshold=v_threshold, v_reset=v_reset)
-            )
+    parser.add_argument('--device', default='cuda:0', help='Device, e.g., "cpu" or "cuda:0"')
+
+    parser.add_argument('--dataset-dir', default='./', help='Root directory for saving MNIST dataset, e.g., "./"')
+    parser.add_argument('--log-dir', default='./', help='Root directory for saving tensorboard logs, e.g., "./"')
+    parser.add_argument('--model-output-dir', default='./', help='Model directory for saving, e.g., "./"')
 
-        def forward(self, x):
-            return self.fc(x)
+    parser.add_argument('-b', '--batch-size', default=64, type=int, help='Batch size, e.g., "64"')
+    parser.add_argument('-T', '--timesteps', default=100, type=int, dest='T', help='Simulating timesteps, e.g., "100"')
+    parser.add_argument('--lr', '--learning-rate', default=1e-3, type=float, metavar='LR', help='Learning rate, e.g., "1e-3": ', dest='lr')
+    parser.add_argument('--tau', default=2.0, type=float, help='Membrane time constant, tau, for LIF neurons, e.g., "100.0"')
+    parser.add_argument('-N', '--epoch', default=100, type=int, help='Training epoch, e.g., "100"')
 
-Define our hyperparameters:
+Initialize the DataLoader:
 
 .. code-block:: python
 
-    device = input('Enter the input device, e.g., "cpu" or "cuda:0": ')
-    dataset_dir = input('Enter the input root directory for saving MNIST dataset, e.g., "./": ')
-    batch_size = int(input('Enter the input batch_size, e.g., "64": '))
-    learning_rate = float(input('Enter the input learning rate, e.g., "1e-3": '))
-    T = int(input('Enter the input simulating steps, e.g., "100": '))
-    tau = float(input('Enter the input membrane time constant, tau, for LIF neurons, e.g., "100.0": '))
-    train_epoch = int(input('Enter the input training epochs, e.g., "100": '))
-    log_dir = input('Enter the input root directory for saving tensorboard logs, e.g., "./": ')
+    # Initialize the DataLoader
+    train_dataset = torchvision.datasets.MNIST(
+        root=dataset_dir,
+        train=True,
+        transform=torchvision.transforms.ToTensor(),
+        download=True
+    )
+    test_dataset = torchvision.datasets.MNIST(
+        root=dataset_dir,
+        train=False,
+        transform=torchvision.transforms.ToTensor(),
+        download=True
+    )
+
+    train_data_loader = data.DataLoader(
+        dataset=train_dataset,
+        batch_size=batch_size,
+        shuffle=True,
+        drop_last=True
+    )
+    test_data_loader = data.DataLoader(
+        dataset=test_dataset,
+        batch_size=batch_size,
+        shuffle=False,
+        drop_last=False
+    )
+
+Define our network structure:
 
-Initialize the data loader, network, optimizer, and encoder (we use a Poisson encoder to encode the MNIST image into spike trains):
+.. code-block:: python
+
+    # Define SNN
+    net = nn.Sequential(
+        nn.Flatten(),
+        nn.Linear(28 * 28, 10, bias=False),
+        neuron.LIFNode(tau=tau)
+    )
+    net = net.to(device)
+
+Initialize the optimizer and encoder (we use a Poisson encoder to encode the MNIST image into spike trains):
 
 .. code-block:: python
 
-    # Initialize the network
-    net = Net(tau=tau).to(device)
-    # Use Adam Optimizer
-    optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate)
+    # Use Adam optimizer
+    optimizer = torch.optim.Adam(net.parameters(), lr=lr)
     # Use Poisson encoder
     encoder = encoding.PoissonEncoder()
 
@@ -133,7 +170,12 @@ The training of the network is simple. Run the network for ``T`` time steps to a
 
 .. code-block:: python
 
-    for img, label in train_data_loader:
+    print("Epoch {}:".format(epoch))
+    print("Training...")
+    train_correct_sum = 0
+    train_sum = 0
+    net.train()
+    for img, label in tqdm(train_data_loader):
         img = img.to(device)
         label = label.to(device)
         label_one_hot = F.one_hot(label, 10).float()
@@ -159,16 +201,28 @@ The training of the network is simple. Run the network for ``T`` time steps to a
         # After optimizing the parameters once, the state of the network needs to be reset, because the SNN neurons have "memory"
         functional.reset_net(net)
 
+        # Calculation of accuracy. The index of the neuron with max frequency in the output layer is the classification result.
+        train_correct_sum += (out_spikes_counter_frequency.max(1)[1] == label.to(device)).float().sum().item()
+        train_sum += label.numel()
+
+        train_batch_accuracy = (out_spikes_counter_frequency.max(1)[1] == label.to(device)).float().mean().item()
+        writer.add_scalar('train_batch_accuracy', train_batch_accuracy, train_times)
+        train_accs.append(train_batch_accuracy)
+
+        train_times += 1
+    train_accuracy = train_correct_sum / train_sum
+
 The test code is simpler than the training code:
 
 .. code-block:: python
-
+    
+    print("Testing...")
     net.eval()
     with torch.no_grad():
         # Each time through the entire data set, test once on the test set
         test_sum = 0
         correct_sum = 0
-        for img, label in test_data_loader:
+        for img, label in tqdm(test_data_loader):
             img = img.to(device)
             for t in range(T):
                 if t == 0:
@@ -179,32 +233,73 @@ The test code is simpler than the training code:
             correct_sum += (out_spikes_counter.max(1)[1] == label.to(device)).float().sum().item()
             test_sum += label.numel()
             functional.reset_net(net)
+        test_accuracy = correct_sum / test_sum
+        writer.add_scalar('test_accuracy', test_accuracy, epoch)
+        test_accs.append(test_accuracy)
+        max_test_accuracy = max(max_test_accuracy, test_accuracy)
+    print("Epoch {}: train_acc={}, test_acc={}, max_test_acc={}, train_times={}".format(epoch, train_accuracy, test_accuracy, max_test_accuracy, train_times))
+    print()
+
+The complete code is located at ``clock_driven.examples.lif_fc_mnist.py``. In the code, we also use Tensorboard to save the training log.
+Here are the (hyper)parameters you can configure:
+
+.. code-block:: shell
+
+    $ python <PATH>/lif_fc_mnist.py --help
+    usage: lif_fc_mnist.py [-h] [--device DEVICE] [--dataset-dir DATASET_DIR] [--log-dir LOG_DIR] [--model-output-dir MODEL_OUTPUT_DIR] [-b BATCH_SIZE] [-T T] [--lr LR] [--tau TAU] [-N EPOCH]
+
+    spikingjelly LIF MNIST Training
+
+    optional arguments:
+    -h, --help            show this help message and exit
+    --device DEVICE       运行的设备，例如“cpu”或“cuda:0” Device, e.g., "cpu" or "cuda:0"
+    --dataset-dir DATASET_DIR
+                            保存MNIST数据集的位置，例如“./” Root directory for saving MNIST dataset, e.g., "./"
+    --log-dir LOG_DIR     保存tensorboard日志文件的位置，例如“./” Root directory for saving tensorboard logs, e.g., "./"
+    --model-output-dir MODEL_OUTPUT_DIR
+                            模型保存路径，例如“./” Model directory for saving, e.g., "./"
+    -b BATCH_SIZE, --batch-size BATCH_SIZE
+                            Batch 大小，例如“64” Batch size, e.g., "64"
+    -T T, --timesteps T   仿真时长，例如“100” Simulating timesteps, e.g., "100"
+    --lr LR, --learning-rate LR
+                            学习率，例如“1e-3” Learning rate, e.g., "1e-3":
+    --tau TAU             LIF神经元的时间常数tau，例如“100.0” Membrane time constant, tau, for LIF neurons, e.g., "100.0"
+    -N EPOCH, --epoch EPOCH
+                            训练epoch，例如“100” Training epoch, e.g., "100"
+
+You can also run it directly on the Python command line:
+
+.. code-block:: shell
+
+    $ python
+    >>> import spikingjelly.clock_driven.examples.lif_fc_mnist as lif_fc_mnist
+    >>> lif_fc_mnist.main()
+    ########## Configurations ##########
+    device=cuda:0
+    dataset_dir=./
+    log_dir=./
+    model_output_dir=./
+    batch_size=64
+    T=100
+    lr=0.001
+    tau=2.0
+    epoch=100
+    ####################################
+    Epoch 0:
+    Training...
+    100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 937/937 [01:26<00:00, 10.89it/s]
+    Testing...
+    100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:05<00:00, 28.79it/s]
+    Epoch 0: train_acc = 0.8641775613660619, test_acc=0.9071, max_test_acc=0.9071, train_times=937
+
+Save and load model：
 
-        writer.add_scalar('test_accuracy', correct_sum / test_sum, epoch)
-
-The complete code is located at ``clock_driven.examples.lif_fc_mnist.py``. In the code, we also use Tensorboard to save the training log. You can run it directly on the Python command line:
-
-    .. code-block:: python
-
-        >>> import spikingjelly.clock_driven.examples.lif_fc_mnist as lif_fc_mnist
-        >>> lif_fc_mnist.main()
-        Enter the input device, e.g., "cpu" or "cuda:0": cuda:15
-        Enter the input root directory for saving MNIST dataset, e.g., "./": ./mnist
-        Enter the input batch_size, e.g., "64": 128
-        Enter the input learning rate, e.g., "1e-3": 1e-3
-        Enter the input simulating steps, e.g., "100": 50
-        Enter the input membrane time constant, tau, for LIF neurons, e.g., "100.0": 100.0
-        Enter the input training epochs, e.g., "100": 100
-        Enter the input root directory for saving tensorboard logs, e.g., "./": ./logs_lif_fc_mnist
-        cuda:15 ./mnist 128 0.001 50 100.0 100 ./logs_lif_fc_mnist
-        train_times 0 train_accuracy 0.109375
-        cuda:15 ./mnist 128 0.001 50 100.0 100 ./logs_lif_fc_mnist
-        train_times 1024 train_accuracy 0.5078125
-        cuda:15 ./mnist 128 0.001 50 100.0 100 ./logs_lif_fc_mnist
-        train_times 2048 train_accuracy 0.7890625
-        ...
-        cuda:15 ./mnist 128 0.001 50 100.0 100 ./logs_lif_fc_mnist
-        train_times 46080 train_accuracy 0.9296875
+.. code-block:: python
+    
+    # Save model
+    torch.save(net, model_output_dir + "/lif_snn_mnist.ckpt")
+    # Load model
+    # net = torch.load(model_output_dir + "/lif_snn_mnist.ckpt")
 
 It should be noted that the amount of memory required to train such an SNN is linearly related to the simulation time ``T``. A longer ``T`` is equivalent to using a smaller simulation step size and training is more "fine", however, the training effect is not necessarily better. So if ``T`` is too large, the SNN will become a very deep network after being expanded in time, and the gradient is easy to decay or explode. Since we use a Poisson encoder, a larger ``T`` is required.
 
@@ -213,4 +308,4 @@ Our model, training 100 epochs on Tesla K80, takes about 75 minutes. The changes
 .. image:: ./_static/examples/clock_driven/lif_fc_mnist/accuracy_curve.png
 
 
-The final test set accuracy rate is about 92%, which is not a very high accuracy rate, because we use a very simple network structure and Poisson encoder. We can completely remove the Poisson encoder and send the image directly to the SNN. In this case, the first layer of LIF neurons can be regarded as an encoder.
\ No newline at end of file
+The final test set accuracy rate is about 92%, which is not a very high accuracy rate, because we use a very simple network structure and Poisson encoder. We can completely remove the Poisson encoder and send the image directly to the SNN. In this case, the first layer of LIF neurons can be regarded as an encoder.
diff --git a/spikingjelly/clock_driven/examples/lif_fc_mnist.py b/spikingjelly/clock_driven/examples/lif_fc_mnist.py
index 36d09e76..75ba8baa 100644
--- a/spikingjelly/clock_driven/examples/lif_fc_mnist.py
+++ b/spikingjelly/clock_driven/examples/lif_fc_mnist.py
@@ -14,11 +14,11 @@
 
 parser.add_argument('--device', default='cuda:0', help='运行的设备，例如“cpu”或“cuda:0”\n Device, e.g., "cpu" or "cuda:0"')
 
-parser.add_argument('--dataset-dir', help='保存MNIST数据集的位置，例如“./”\n Root directory for saving MNIST dataset, e.g., "./"')
-parser.add_argument('--log-dir', help='保存tensorboard日志文件的位置，例如“./”\n Root directory for saving tensorboard logs, e.g., "./"')
-parser.add_argument('--model-output-dir', help='模型保存路径，例如“./”\n Model directory for saving, e.g., "./"')
+parser.add_argument('--dataset-dir', default='./', help='保存MNIST数据集的位置，例如“./”\n Root directory for saving MNIST dataset, e.g., "./"')
+parser.add_argument('--log-dir', default='./', help='保存tensorboard日志文件的位置，例如“./”\n Root directory for saving tensorboard logs, e.g., "./"')
+parser.add_argument('--model-output-dir', default='./', help='模型保存路径，例如“./”\n Model directory for saving, e.g., "./"')
 
-parser.add_argument('-b', '--batch-size', default=128, type=int)
+parser.add_argument('-b', '--batch-size', default=64, type=int, help='Batch 大小，例如“64”\n Batch size, e.g., "64"')
 parser.add_argument('-T', '--timesteps', default=100, type=int, dest='T', help='仿真时长，例如“100”\n Simulating timesteps, e.g., "100"')
 parser.add_argument('--lr', '--learning-rate', default=1e-3, type=float, metavar='LR', help='学习率，例如“1e-3”\n Learning rate, e.g., "1e-3": ', dest='lr')
 parser.add_argument('--tau', default=2.0, type=float, help='LIF神经元的时间常数tau，例如“100.0”\n Membrane time constant, tau, for LIF neurons, e.g., "100.0"')
@@ -29,14 +29,14 @@ def main():
     '''
     :return: None
 
-    * :ref:`中文API <lif_fc_mnist.main-cn>`
+    * :ref:`API in English <lif_fc_mnist.main-en>`
 
     .. _lif_fc_mnist.main-cn:
 
     使用全连接-LIF的网络结构，进行MNIST识别。\n
     这个函数会初始化网络进行训练，并显示训练过程中在测试集的正确率。
 
-    * :ref:`API in English <lif_fc_mnist.main-en>`
+    * :ref:`中文API <lif_fc_mnist.main-cn>`
 
     .. _lif_fc_mnist.main-en:
 
@@ -45,6 +45,9 @@ def main():
     '''
     
     args = parser.parse_args()
+    print("########## Configurations ##########")
+    print('\n'.join(f'{k}={v}' for k, v in vars(args).items()))
+    print("####################################")
 
     device = args.device
     dataset_dir = args.dataset_dir
@@ -65,18 +68,25 @@ def main():
         transform=torchvision.transforms.ToTensor(),
         download=True
     )
-    test_dataset = torchvision.datasets.MNIST(root=dataset_dir,train=False,transform=torchvision.transforms.ToTensor(),download=True)
+    test_dataset = torchvision.datasets.MNIST(
+        root=dataset_dir,
+        train=False,
+        transform=torchvision.transforms.ToTensor(),
+        download=True
+    )
 
     train_data_loader = data.DataLoader(
         dataset=train_dataset,
         batch_size=batch_size,
         shuffle=True,
-        drop_last=True)
+        drop_last=True
+    )
     test_data_loader = data.DataLoader(
         dataset=test_dataset,
         batch_size=batch_size,
         shuffle=False,
-        drop_last=False)
+        drop_last=False
+    )
 
     # 定义并初始化网络
     net = nn.Sequential(
@@ -96,6 +106,10 @@ def main():
     train_accs = []
 
     for epoch in range(train_epoch):
+        print("Epoch {}:".format(epoch))
+        print("Training...")
+        train_correct_sum = 0
+        train_sum = 0
         net.train()
         for img, label in tqdm(train_data_loader):
             img = img.to(device)
@@ -124,18 +138,23 @@ def main():
             functional.reset_net(net)
 
             # 正确率的计算方法如下。认为输出层中脉冲发放频率最大的神经元的下标i是分类结果
-            accuracy = (out_spikes_counter_frequency.max(1)[1] == label.to(device)).float().mean().item()
-            
-            writer.add_scalar('train_accuracy', accuracy, train_times)
-            train_accs.append(accuracy)
+            train_correct_sum += (out_spikes_counter_frequency.max(1)[1] == label.to(device)).float().sum().item()
+            train_sum += label.numel()
+
+            train_batch_accuracy = (out_spikes_counter_frequency.max(1)[1] == label.to(device)).float().mean().item()
+            writer.add_scalar('train_batch_accuracy', train_batch_accuracy, train_times)
+            train_accs.append(train_batch_accuracy)
 
             train_times += 1
+        train_accuracy = train_correct_sum / train_sum
+
+        print("Testing...")
         net.eval()
         with torch.no_grad():
             # 每遍历一次全部数据集，就在测试集上测试一次
+            test_correct_sum = 0
             test_sum = 0
-            correct_sum = 0
-            for img, label in test_data_loader:
+            for img, label in tqdm(test_data_loader):
                 img = img.to(device)
                 for t in range(T):
                     if t == 0:
@@ -143,14 +162,15 @@ def main():
                     else:
                         out_spikes_counter += net(encoder(img).float())
 
-                correct_sum += (out_spikes_counter.max(1)[1] == label.to(device)).float().sum().item()
+                test_correct_sum += (out_spikes_counter.max(1)[1] == label.to(device)).float().sum().item()
                 test_sum += label.numel()
                 functional.reset_net(net)
-            test_accuracy = correct_sum / test_sum
+            test_accuracy = test_correct_sum / test_sum
             writer.add_scalar('test_accuracy', test_accuracy, epoch)
             test_accs.append(test_accuracy)
             max_test_accuracy = max(max_test_accuracy, test_accuracy)
-        print(f'Epoch {epoch}: device={device}, dataset_dir={dataset_dir}, batch_size={batch_size}, learning_rate={lr}, T={T}, log_dir={log_dir}, max_test_accuracy={max_test_accuracy}, train_times={train_times}')
+        print("Epoch {}: train_acc = {}, test_acc={}, max_test_acc={}, train_times={}".format(epoch, train_accuracy, test_accuracy, max_test_accuracy, train_times))
+        print()
     
     # 保存模型
     torch.save(net, model_output_dir + "/lif_snn_mnist.ckpt")
diff --git a/spikingjelly/event_driven/examples/tempotron_mnist.py b/spikingjelly/event_driven/examples/tempotron_mnist.py
index 0c2e35fd..4ae37d91 100644
--- a/spikingjelly/event_driven/examples/tempotron_mnist.py
+++ b/spikingjelly/event_driven/examples/tempotron_mnist.py
@@ -7,17 +7,18 @@
 from torch.utils.tensorboard import SummaryWriter
 import spikingjelly.event_driven.encoding as encoding
 import spikingjelly.event_driven.neuron as neuron
+from tqdm import tqdm
 
 
 parser = argparse.ArgumentParser(description='spikingjelly Tempotron MNIST Training')
 
 parser.add_argument('--device', default='cuda:0', help='运行的设备，例如“cpu”或“cuda:0”\n Device, e.g., "cpu" or "cuda:0"')
 
-parser.add_argument('--dataset-dir', default='', help='保存MNIST数据集的位置，例如“./”\n Root directory for saving MNIST dataset, e.g., "./"')
-parser.add_argument('--log-dir', default='', help='保存tensorboard日志文件的位置，例如“./”\n Root directory for saving tensorboard logs, e.g., "./"')
-parser.add_argument('--model-output-dir', default='', help='模型保存路径，例如“./”\n Model directory for saving, e.g., "./"')
+parser.add_argument('--dataset-dir', default='./', help='保存MNIST数据集的位置，例如“./”\n Root directory for saving MNIST dataset, e.g., "./"')
+parser.add_argument('--log-dir', default='./', help='保存tensorboard日志文件的位置，例如“./”\n Root directory for saving tensorboard logs, e.g., "./"')
+parser.add_argument('--model-output-dir', default='./', help='模型保存路径，例如“./”\n Model directory for saving, e.g., "./"')
 
-parser.add_argument('-b', '--batch-size', default=128, type=int, help='Batch 大小，例如“64”\n Batch size, e.g., "64"')
+parser.add_argument('-b', '--batch-size', default=64, type=int, help='Batch 大小，例如“64”\n Batch size, e.g., "64"')
 parser.add_argument('-T', '--timesteps', default=100, type=int, dest='T', help='仿真时长，例如“100”\n Simulating timesteps, e.g., "100"')
 parser.add_argument('--lr', '--learning-rate', default=1e-3, type=float, metavar='LR', help='学习率，例如“1e-3”\n Learning rate, e.g., "1e-3": ', dest='lr')
 # parser.add_argument('--tau', default=2.0, type=float, help='LIF神经元的时间常数tau，例如“100.0”\n Membrane time constant, tau, for LIF neurons, e.g., "100.0"')
@@ -31,7 +32,6 @@ def __init__(self, m, T):
         super().__init__()
         self.tempotron = neuron.Tempotron(28*28*m, 10, T)     # mnist 28*28=784
     
-    
     def forward(self, x: torch.Tensor):
         # 返回的是输出层10个Tempotron在仿真时长内的电压峰值
         return self.tempotron(x, 'v_max')
@@ -41,14 +41,14 @@ def main():
     '''
     :return: None
 
-    * :ref:`中文API <tempotron_mnist.main-cn>`
+    * :ref:`API in English <tempotron_mnist.main-en>`
 
     .. _tempotron_mnist.main-cn:
 
     使用高斯调谐曲线编码器编码图像为脉冲，单层Tempotron进行MNIST识别。\n
     这个函数会初始化网络进行训练，并显示训练过程中在测试集的正确率。
 
-    * :ref:`API in English <tempotron_mnist.main-en>`
+    * :ref:`中文API <tempotron_mnist.main-cn>`
 
     .. _tempotron_mnist.main-en:
 
@@ -58,6 +58,9 @@ def main():
     '''
 
     args = parser.parse_args()
+    print("########## Configurations ##########")
+    print('\n'.join(f'{k}={v}' for k, v in vars(args).items()))
+    print("####################################")
 
     device = args.device
 
@@ -71,8 +74,6 @@ def main():
     train_epoch = args.epoch
     m = args.m
 
-    print(device, dataset_dir, batch_size, learning_rate, T, train_epoch, m, log_dir)
-
     # 每个像素点用m个神经元来编码
     encoder = encoding.GaussianTuning(n=1, m=m, x_min=torch.zeros(size=[1]).to(device), x_max=torch.ones(size=[1]).to(device))
 
@@ -95,7 +96,7 @@ def main():
             transform=torchvision.transforms.ToTensor(),
             download=True),
         batch_size=batch_size,
-        shuffle=True,
+        shuffle=False,
         drop_last=False)
 
     # 初始化网络
@@ -104,28 +105,41 @@ def main():
     optimizer = torch.optim.SGD(net.parameters(), lr=learning_rate)
 
     train_times = 0
+    max_test_accuracy = 0
+
     for epoch in range(train_epoch):
+        print("Epoch {}:".format(epoch))
+        print("Training...")
+        train_correct_sum = 0
+        train_sum = 0
         net.train()
-        for img, label in train_data_loader:
+        for img, label in tqdm(train_data_loader):
             img = img.view(img.shape[0], -1).unsqueeze(1)  # [batch_size, 1, 784]
-
             in_spikes = encoder.encode(img.to(device), T)  # [batch_size, 1, 784, m]
             in_spikes = in_spikes.view(in_spikes.shape[0], -1)  # [batch_size, 784*m]
+
+            optimizer.zero_grad()
+
             v_max = net(in_spikes)
-            train_acc = (v_max.argmax(dim=1) == label.to(device)).float().mean().item()
-            if train_times % 256 == 0:
-                writer.add_scalar('train_acc', train_acc, train_times)
-            if train_times % 512 == 0:
-                print('train_acc', train_acc, train_times)
             loss = neuron.Tempotron.mse_loss(v_max, net.tempotron.v_threshold, label.to(device), 10)
             loss.backward()
             optimizer.step()
+
+            train_correct_sum += (v_max.argmax(dim=1) == label.to(device)).float().sum().item()
+            train_sum += label.numel()
+
+            train_batch_acc = (v_max.argmax(dim=1) == label.to(device)).float().mean().item()
+            writer.add_scalar('train_batch_acc', train_batch_acc, train_times)
+
             train_times += 1
+        train_accuracy = train_correct_sum / train_sum
+
+        print("Testing...")
         net.eval()
         with torch.no_grad():
             correct_num = 0
             img_num = 0
-            for img, label in test_data_loader:
+            for img, label in tqdm(test_data_loader):
                 img = img.view(img.shape[0], -1).unsqueeze(1)  # [batch_size, 1, 784]
 
                 in_spikes = encoder.encode(img.to(device), T)  # [batch_size, 1, 784, m]
@@ -133,9 +147,11 @@ def main():
                 v_max = net(in_spikes)
                 correct_num += (v_max.argmax(dim=1) == label.to(device)).float().sum().item()
                 img_num += img.shape[0]
-            test_acc = correct_num / img_num
-            writer.add_scalar('test_acc', test_acc, epoch)
-            print('test_acc', test_acc, train_times)
+            test_accuracy = correct_num / img_num
+            writer.add_scalar('test_accuracy', test_accuracy, epoch)
+            max_test_accuracy = max(max_test_accuracy, test_accuracy)
+        print("Epoch {}: train_acc = {}, test_acc={}, max_test_acc={}, train_times={}".format(epoch, train_accuracy, test_accuracy, max_test_accuracy, train_times))
+        print()
     
     # 保存模型
     torch.save(net, model_output_dir + "/tempotron_snn_mnist.ckpt")


Test patch:
diff --git a/docs/source/_static/examples/event_driven/tempotron_mnist/test_accuracy_scale.png b/docs/source/_static/examples/event_driven/tempotron_mnist/test_accuracy_scale.png
new file mode 100644
index 00000000..6287cf8d
Binary files /dev/null and b/docs/source/_static/examples/event_driven/tempotron_mnist/test_accuracy_scale.png differ
diff --git a/docs/source/_static/examples/event_driven/tempotron_mnist/test_accuracy_scale.svg b/docs/source/_static/examples/event_driven/tempotron_mnist/test_accuracy_scale.svg
new file mode 100644
index 00000000..42626e7b
--- /dev/null
+++ b/docs/source/_static/examples/event_driven/tempotron_mnist/test_accuracy_scale.svg
@@ -0,0 +1,1 @@
+<svg viewBox="0 0 1707.2222900390625 400.0000305175781" xmlns="http://www.w3.org/2000/svg"><g><g><g><g><g><line x1="41.171875" y1="329.079484732155" x2="36.171875" y2="329.079484732155" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="41.171875" y1="203.83072125806987" x2="36.171875" y2="203.83072125806987" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="41.171875" y1="95.33530735567444" x2="36.171875" y2="95.33530735567444" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line></g><g transform="translate(31.171875, 0)"><text x="0" y="329.079484732155" dx="0em" dy="0.3em" style="text-anchor: end; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">0.6</text><text x="0" y="203.83072125806987" dx="0em" dy="0.3em" style="text-anchor: end; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">0.7</text><text x="0" y="95.33530735567444" dx="0em" dy="0.3em" style="text-anchor: end; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">0.8</text></g><line x1="41.171875" y1="0" x2="41.171875" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line></g></g><g transform="translate(41, 0)" clip-path="url(#clip_0)"><clipPath id="clip_0"><rect width="1666" height="376"></rect></clipPath><g><g><g><line x1="0" y1="0" x2="0" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="138.83734375" y1="0" x2="138.83734375" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="277.6746875" y1="0" x2="277.6746875" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="416.51203125" y1="0" x2="416.51203125" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="555.349375" y1="0" x2="555.349375" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="694.1867187500001" y1="0" x2="694.1867187500001" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="833.0240625" y1="0" x2="833.0240625" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="971.8614062500001" y1="0" x2="971.8614062500001" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="1110.69875" y1="0" x2="1110.69875" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="1249.53609375" y1="0" x2="1249.53609375" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="1388.3734375000001" y1="0" x2="1388.3734375000001" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="1527.2107812499999" y1="0" x2="1527.2107812499999" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="1666.048125" y1="0" x2="1666.048125" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line></g><g><line x1="0" y1="329.079484732155" x2="1666.048125" y2="329.079484732155" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="0" y1="203.83072125806987" x2="1666.048125" y2="203.83072125806987" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line><line x1="0" y1="95.33530735567444" x2="1666.048125" y2="95.33530735567444" fill="rgb(0, 0, 0)" stroke="rgb(66, 66, 66)" stroke-width="1px" opacity="0.25"></line></g></g></g><g><g><line x1="138.83734375" y1="0" x2="138.83734375" y2="377" fill="rgb(0, 0, 0)" stroke="rgb(153, 153, 153)" stroke-width="1.5px"></line></g></g><g><g><g><g><g><path stroke="rgb(255, 112, 67)" stroke-width="2px" d="M138.83734375,323.14285714285717L152.721078125,229.6567807247107L166.6048125,185.58164429101194L180.488546875,163.63577514092205L194.37228125000001,149.83440087385446L208.256015625,144.74571088528992L222.13975,130.62222843107907L236.023484375,121.55083708164786L249.90721875,123.54628880898356L263.790953125,116.63577426964237L277.6746875,111.33575686172273L291.55842187499996,109.06010275102794L305.44215625,106.79080443886778L319.325890625,104.83603239827309L333.209625,100.02069172477724L347.09335937500003,99.81644248729445L360.97709375,97.26731604126708L374.860828125,92.80016719531716L388.74456250000003,86.64744464741838L402.628296875,90.27292446017712L416.51203125,88.4581624072206L430.395765625,90.27292446017712L444.2795,82.63800990587522L458.16323437500006,84.03905366716295L472.04696875,82.8380452286657L485.93070312500004,82.9380217409992L499.8144375,82.03831836161686L513.6981718750001,78.74778473532136L527.58190625,80.24183544212295L541.465640625,77.85270677795532L555.349375,78.94686447741987L569.233109375,80.24183544212295L583.1168437499999,75.37146159826915L597.0005781250001,76.0654444397416L610.8843125,74.28210488663657L624.768046875,77.7532947639197L638.65178125,74.87609692517779L652.535515625,71.31852339055325L666.41925,70.43158792785597L680.302984375,71.51573211450108L694.1867187500001,71.12136252067181L708.070453125,72.00905167350406L721.9541875,70.53004937050889L735.837921875,71.21990759216638L749.72165625,68.56226394449192L763.6053906249999,68.3657121260263L777.4891250000001,69.84077637420465L791.372859375,69.05373439128408L805.25659375,67.67827197659808L819.140328125,66.79529917494632L833.0240625,66.59917428227449L846.9077968749999,69.25045273803953L860.79153125,66.30513409096324L874.6752656250001,63.85885091173907L888.559,65.8153229090701L902.442734375,65.1300362790687L916.3264687500001,63.95657726537523L930.210203125,62.687283192106335L944.0939375,61.80965658554968L957.9776718749999,63.76113631095194L971.8614062500001,61.517344271786655L985.745140625,63.17521173243543L999.628875,62.39459689373526L1013.5126093749999,60.9330349465772L1027.3963437500001,61.419910845015494L1041.280078125,61.80965658554968L1055.1638125,61.12773868936677L1069.047546875,60.3490875356882L1082.93128125,61.517344271786655L1096.8150156250001,59.18256605540326L1110.69875,57.04820642381863L1124.5824843750001,60.73831983696935L1138.46621875,58.1146854025139L1152.349953125,58.59987489625224L1166.2336874999999,59.18256605540326L1180.117421875,59.08541218913319L1194.0011562500001,58.502790674807024L1207.884890625,60.05730011752941L1221.768625,58.79407814698121L1235.652359375,59.57118187213538L1249.53609375,57.62972767522853L1263.4198281249999,57.53275929767191L1277.3035625,55.01609577914652L1291.1872968750001,57.33891502439263L1305.07103125,55.98312544453329L1318.954765625,56.37027134377381L1332.8385,56.75754406956112L1346.722234375,56.17664649151065L1360.60596875,57.7267076268015L1374.489703125,55.98312544453329L1388.3734375000001,57.24198134542356L1402.257171875,54.72615934306585L1416.14090625,55.40272343714717L1430.0246406249998,54.14671175869628L1443.908375,54.82279332652432L1457.792109375,54.532983419855896L1471.67584375,56.37027134377381L1485.5595781250001,55.30607808689994L1499.4433125,55.692901442739355L1513.327046875,53.85714285714283" style="fill: none;" fill="none"></path></g></g></g></g></g></g><g transform="translate(41, 377)" clip-path="url(#clip_1)"><clipPath id="clip_1"><rect width="1666" height="22"></rect></clipPath><g><g><line x1="0" y1="0" x2="0" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="138.83734375" y1="0" x2="138.83734375" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="277.6746875" y1="0" x2="277.6746875" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="416.51203125" y1="0" x2="416.51203125" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="555.349375" y1="0" x2="555.349375" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="694.1867187500001" y1="0" x2="694.1867187500001" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="833.0240625" y1="0" x2="833.0240625" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="971.8614062500001" y1="0" x2="971.8614062500001" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="1110.69875" y1="0" x2="1110.69875" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="1249.53609375" y1="0" x2="1249.53609375" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="1388.3734375000001" y1="0" x2="1388.3734375000001" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="1527.2107812499999" y1="0" x2="1527.2107812499999" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line><line x1="1666.048125" y1="0" x2="1666.048125" y2="5" style="visibility: inherit;" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line></g><g transform="translate(0, 8)"><text x="0" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: hidden; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">-10</text><text x="138.83734375" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">0</text><text x="277.6746875" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">10</text><text x="416.51203125" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">20</text><text x="555.349375" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">30</text><text x="694.1867187500001" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">40</text><text x="833.0240625" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">50</text><text x="971.8614062500001" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">60</text><text x="1110.69875" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">70</text><text x="1249.53609375" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">80</text><text x="1388.3734375000001" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">90</text><text x="1527.2107812499999" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: inherit; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">100</text><text x="1666.048125" y="0" dx="0em" dy="0.95em" style="text-anchor: middle; visibility: hidden; font-family: Roboto, sans-serif; font-size: 12px; font-weight: 200;" fill="rgb(33, 33, 33)" stroke="none" stroke-width="1px">110</text></g><line x1="0" y1="0" x2="1666.048125" y2="0" fill="rgb(0, 0, 0)" stroke="rgb(204, 204, 204)" stroke-width="1px"></line></g></g></g></g></svg>
\ No newline at end of file