import%20marimo%0A%0A__generated_with%20%3D%20%220.24.0%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0Awith%20app.setup%3A%0A%20%20%20%20from%20collections%20import%20OrderedDict%0A%20%20%20%20from%20dataclasses%20import%20dataclass%0A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20pandas%20as%20pd%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20%E6%89%8B%E6%9B%B8%E3%81%8D%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%A9%E3%83%AB%E3%83%8D%E3%83%83%E3%83%88%E3%81%AB%E3%82%88%E3%82%8B%E6%95%B0%E5%AD%97%E5%88%86%E9%A1%9E%0A%0A%20%20%20%20%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E8%87%AA%E5%8B%95%E5%BE%AE%E5%88%86%E3%81%AB%E9%A0%BC%E3%82%89%E3%81%9A%E3%80%81%E9%A0%86%E4%BC%9D%E6%92%AD%E3%81%A8%E9%80%86%E4%BC%9D%E6%92%AD%E3%82%92%20NumPy%20%E3%81%A0%E3%81%91%E3%81%A7%E5%AE%9F%E8%A3%85%E3%81%97%E3%81%A6%E6%95%B0%E5%AD%97%E3%82%92%E5%88%86%E9%A1%9E%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%83%AC%E3%82%A4%E3%83%A4%E3%81%AF%20Sigmoid%E3%83%BBAffine%E3%83%BBSoftmax-with-Loss%20%E3%81%AE3%E7%A8%AE%E9%A1%9E%E3%81%A7%E3%80%81%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%20%60forward%60%20%E3%81%A8%0A%20%20%20%20%60backward%60%20%E3%82%92%E6%8C%81%E3%81%A1%E3%81%BE%E3%81%99%E3%80%82%60backward%60%20%E3%82%92%E6%95%B0%E5%BC%8F%E3%81%8B%E3%82%89%E5%B0%8E%E3%81%84%E3%81%A6%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%93%E3%81%AE%20notebook%20%E3%81%AE%E4%B8%BB%E7%9C%BC%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E5%85%83%20notebook%20%E3%81%AF%20OpenML%20%E3%81%AE%20MNIST%EF%BC%88%60fetch_openml(%22mnist_784%22)%60%EF%BC%89%E3%81%A8%20PyCaret%20%E3%82%92%E7%B5%8C%E7%94%B1%E3%81%97%E3%81%A6%0A%20%20%20%20%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F%E3%81%8C%E3%80%81%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%E8%87%AA%E5%89%8D%E5%AE%9F%E8%A3%85%E3%81%AE%E9%A0%86%E4%BC%9D%E6%92%AD%E3%83%BB%E9%80%86%E4%BC%9D%E6%92%AD%E3%82%92%E5%AD%A6%E3%81%B6%E6%84%8F%E5%9B%B3%E3%82%92%E4%BF%9D%E3%81%A1%E3%81%A4%E3%81%A4%E3%80%81%0A%20%20%20%20%E8%BF%BD%E5%8A%A0%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E4%B8%8D%E8%A6%81%E3%81%AE%20%60load_digits()%60%20%E3%82%92%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%83%87%E3%83%BC%E3%82%BF%0A%0A%20%20%20%20scikit-learn%20%E3%81%AE%20%60load_digits()%60%20%E3%81%AF%208%C3%978%20%E3%81%AE%E6%89%8B%E6%9B%B8%E3%81%8D%E6%95%B0%E5%AD%971%2C797%E6%9E%9A%E3%81%A7%E3%80%81%E5%90%84%E7%94%BB%E7%B4%A0%E3%81%AF%200%20%E3%81%8B%E3%82%89%2016%20%E3%81%AE%0A%20%20%20%20%E6%95%B4%E6%95%B0%E5%80%A4%E3%81%A7%E3%81%99%E3%80%82%E3%81%93%E3%82%8C%E3%82%9216%E3%81%A7%E5%89%B2%E3%81%A3%E3%81%A6%20%24%5B0%2C%201%5D%24%20%E3%81%AB%E5%8F%8E%E3%82%81%E3%80%8164%E6%AC%A1%E5%85%83%E3%81%AE%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%A8%E3%81%97%E3%81%A6%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%83%A9%E3%83%99%E3%83%AB%E3%81%AF0%E3%81%8B%E3%82%899%E3%81%AE%E6%95%B4%E6%95%B0%E3%81%A7%E3%81%99%E3%81%8C%E3%80%81%E4%BA%A4%E5%B7%AE%E3%82%A8%E3%83%B3%E3%83%88%E3%83%AD%E3%83%94%E3%83%BC%E3%81%AE%E8%A8%88%E7%AE%97%E3%81%A7%E3%81%AF%E6%AD%A3%E8%A7%A3%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%A0%E3%81%91%E3%81%8C1%E3%81%AE%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%8C%0A%20%20%20%20%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%60np.eye(10)%5Blabels%5D%60%20%E3%81%A7%20one-hot%20%E8%A1%A8%E7%8F%BE%E3%81%B8%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AF**%E5%AD%A6%E7%BF%92%E3%83%BB%E6%A4%9C%E8%A8%BC%E3%83%BB%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE3%E3%81%A4**%E3%81%AB%E5%88%86%E3%81%91%E3%81%BE%E3%81%99%E3%80%82%E3%81%BE%E3%81%9A75%E5%AF%BE25%E3%81%A7%E5%AD%A6%E7%BF%92%E7%94%A8%E3%81%A8%E4%BF%9D%E7%95%99%E5%88%86%E3%81%AB%E5%88%86%E3%81%91%E3%80%81%0A%20%20%20%20%E4%BF%9D%E7%95%99%E5%88%86%E3%82%92%E3%81%95%E3%82%89%E3%81%AB%E5%8D%8A%E5%88%86%E3%81%9A%E3%81%A4%E6%A4%9C%E8%A8%BC%E7%94%A8%E3%81%A8%E3%83%86%E3%82%B9%E3%83%88%E7%94%A8%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%AD%A6%E7%BF%92%E6%9B%B2%E7%B7%9A%E3%81%AE%E7%9B%A3%E8%A6%96%E3%82%84%E5%88%9D%E6%9C%9F%E5%80%A4%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB%E3%81%AE%E6%AF%94%E8%BC%83%E3%81%AB%E3%81%AF%0A%20%20%20%20%E6%A4%9C%E8%A8%BC%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E4%BD%BF%E3%81%84%E3%80%81%E3%83%86%E3%82%B9%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AF%E6%9C%80%E5%BE%8C%E3%81%AB%E4%B8%80%E5%BA%A6%E3%81%A0%E3%81%91%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E5%90%8C%E3%81%98%E3%83%87%E3%83%BC%E3%82%BF%E3%81%A7%E4%BD%95%E5%BA%A6%E3%82%82%E5%88%A4%E6%96%AD%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%0A%20%20%20%20%E3%81%9D%E3%81%AE%20data%20%E3%81%AB%E5%90%88%E3%82%8F%E3%81%9B%E8%BE%BC%E3%82%93%E3%81%A0%E7%B5%90%E6%9E%9C%E3%82%92%E6%B1%8E%E5%8C%96%E6%80%A7%E8%83%BD%E3%81%A8%E5%8F%96%E3%82%8A%E9%81%95%E3%81%88%E3%82%8B%E3%81%9F%E3%82%81%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E5%88%86%E5%89%B2%E3%81%AF%E3%81%84%E3%81%9A%E3%82%8C%E3%82%82%20%60stratify%60%20%E3%81%A7%E5%90%84%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AE%E6%AF%94%E7%8E%87%E3%82%92%E4%BF%9D%E3%81%A1%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20sklearn.datasets%20import%20load_digits%0A%20%20%20%20from%20sklearn.model_selection%20import%20train_test_split%0A%0A%20%20%20%20digits%20%3D%20load_digits()%0A%20%20%20%20features%20%3D%20digits.data.astype(np.float64)%20%2F%2016.0%0A%20%20%20%20labels%20%3D%20digits.target.astype(np.int64)%0A%20%20%20%20x_train%2C%20x_holdout%2C%20y_train_labels%2C%20y_holdout_labels%20%3D%20train_test_split(features%2C%20labels%2C%20test_size%3D0.25%2C%20random_state%3D71%2C%20stratify%3Dlabels)%0A%20%20%20%20x_validation%2C%20x_test%2C%20y_validation_labels%2C%20y_test_labels%20%3D%20train_test_split(x_holdout%2C%20y_holdout_labels%2C%20test_size%3D0.5%2C%20random_state%3D71%2C%20stratify%3Dy_holdout_labels)%0A%20%20%20%20y_train%20%3D%20np.eye(10)%5By_train_labels%5D%0A%20%20%20%20y_validation%20%3D%20np.eye(10)%5By_validation_labels%5D%0A%20%20%20%20print(f%22train%3A%20%7Bx_train.shape%7D%2C%20validation%3A%20%7Bx_validation.shape%7D%2C%20test%3A%20%7Bx_test.shape%7D%2C%20pixel%20range%3A%20%5B%7Bfeatures.min()%3A.2f%7D%2C%20%7Bfeatures.max()%3A.2f%7D%5D%22)%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20digits%2C%0A%20%20%20%20%20%20%20%20x_test%2C%0A%20%20%20%20%20%20%20%20x_train%2C%0A%20%20%20%20%20%20%20%20x_validation%2C%0A%20%20%20%20%20%20%20%20y_test_labels%2C%0A%20%20%20%20%20%20%20%20y_train%2C%0A%20%20%20%20%20%20%20%20y_validation%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%85%A5%E5%8A%9B%E7%94%BB%E5%83%8F%E3%81%AE%E5%85%88%E9%A0%AD10%E6%9E%9A%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%828%C3%978%E3%81%A8%E3%81%84%E3%81%86%E7%B2%97%E3%81%95%E3%81%A7%E3%82%82%E6%95%B0%E5%AD%97%E3%81%8C%E5%88%A4%E5%88%A5%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(digits)%3A%0A%20%20%20%20_fig%2C%20_axes%20%3D%20plt.subplots(2%2C%205%2C%20figsize%3D(8%2C%204))%0A%20%20%20%20for%20_idx%2C%20_axis%20in%20enumerate(_axes.ravel())%3A%0A%20%20%20%20%20%20%20%20_axis.imshow(digits.images%5B_idx%5D%2C%20cmap%3D%22gray_r%22)%0A%20%20%20%20%20%20%20%20_axis.set_title(f%22label%3D%7Bdigits.target%5B_idx%5D%7D%22)%0A%20%20%20%20%20%20%20%20_axis.axis(%22off%22)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%83%AC%E3%82%A4%E3%83%A4%E3%81%AE%E5%AE%9F%E8%A3%85%0A%0A%20%20%20%20%E4%BB%A5%E9%99%8D%E3%81%AE%E3%83%AC%E3%82%A4%E3%83%A4%E3%81%AF%E3%81%99%E3%81%B9%E3%81%A6**%E3%83%90%E3%83%83%E3%83%81%E3%82%92%E8%A1%8C%E6%96%B9%E5%90%91%E3%81%AB%E4%B8%A6%E3%81%B9%E3%81%9F%E8%A6%8F%E7%B4%84**%E3%81%A7%E6%9B%B8%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%E5%85%A5%E5%8A%9B%20%24X%24%20%E3%81%AF%0A%20%20%20%20%24N%20%5Ctimes%20D_%7B%5Ctext%7Bin%7D%7D%24%20%E8%A1%8C%E5%88%97%E3%81%A7%E3%80%81%24n%24%20%E8%A1%8C%E7%9B%AE%E3%81%8C%20%24n%24%20%E7%95%AA%E7%9B%AE%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E3%81%99%E3%80%82%E6%95%99%E7%A7%91%E6%9B%B8%E3%81%A7%E3%82%88%E3%81%8F%E8%A6%8B%E3%82%8B%0A%20%20%20%20%24Y%20%3D%20WX%20%2B%20b%24%EF%BC%88%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%92%E5%88%97%E3%81%AB%E4%B8%A6%E3%81%B9%E3%82%8B%E8%A6%8F%E7%B4%84%EF%BC%89%E3%81%A8%E3%81%AF%E8%BB%A2%E7%BD%AE%E3%81%AE%E9%96%A2%E4%BF%82%E3%81%AB%E3%81%82%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%81%0A%20%20%20%20%E5%BC%8F%E3%81%AB%E7%8F%BE%E3%82%8C%E3%82%8B%E8%A1%8C%E5%88%97%E3%81%AE%E9%A0%86%E5%BA%8F%E3%81%A8%E8%BB%A2%E7%BD%AE%E3%81%AE%E4%BD%8D%E7%BD%AE%E3%81%8C%E5%85%A5%E3%82%8C%E6%9B%BF%E3%82%8F%E3%82%8B%E7%82%B9%E3%81%AB%E6%B3%A8%E6%84%8F%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%0A%20%20%20%20%E5%90%84%E3%83%AC%E3%82%A4%E3%83%A4%E3%81%AF%E6%AC%A1%E3%81%AE2%E3%81%A4%E3%81%AE%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E6%8C%81%E3%81%A1%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%60forward(x)%60%EF%BC%9A%E5%85%A5%E5%8A%9B%E3%81%8B%E3%82%89%E5%87%BA%E5%8A%9B%E3%82%92%E8%A8%88%E7%AE%97%E3%81%97%E3%80%81%E9%80%86%E4%BC%9D%E6%92%AD%E3%81%A7%E5%BF%85%E8%A6%81%E3%81%AB%E3%81%AA%E3%82%8B%E4%B8%AD%E9%96%93%E7%B5%90%E6%9E%9C%E3%82%92%E8%87%AA%E8%BA%AB%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B%0A%20%20%20%20-%20%60backward(dout)%60%EF%BC%9A%E5%87%BA%E5%8A%9B%E5%81%B4%E3%81%8B%E3%82%89%E6%9D%A5%E3%81%9F%E5%8B%BE%E9%85%8D%20%24%5Cpartial%20L%2F%5Cpartial%20Y%24%20%E3%82%92%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8A%E3%80%81%0A%20%20%20%20%20%20%E5%85%A5%E5%8A%9B%E5%81%B4%E3%81%B8%E6%B8%A1%E3%81%99%E5%8B%BE%E9%85%8D%20%24%5Cpartial%20L%2F%5Cpartial%20X%24%20%E3%82%92%E8%BF%94%E3%81%99%E3%80%82%E9%87%8D%E3%81%BF%E3%82%92%E6%8C%81%E3%81%A4%E3%83%AC%E3%82%A4%E3%83%A4%E3%81%AF%0A%20%20%20%20%20%20%E8%87%AA%E8%BA%AB%E3%81%AE%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%81%AE%E5%8B%BE%E9%85%8D%E3%82%82%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20Sigmoid%20%E3%83%AC%E3%82%A4%E3%83%A4%0A%0A%20%20%20%20%E3%82%B7%E3%82%B0%E3%83%A2%E3%82%A4%E3%83%89%E9%96%A2%E6%95%B0%E3%81%A8%E3%80%81%E3%81%9D%E3%81%AE%E5%B0%8E%E9%96%A2%E6%95%B0%E3%81%8C%E5%87%BA%E5%8A%9B%E3%81%A0%E3%81%91%E3%81%A7%E6%9B%B8%E3%81%91%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%24%24%0A%20%20%20%20%5Csigma(x)%20%3D%20%5Cfrac%7B1%7D%7B1%2Be%5E%7B-x%7D%7D%2C%20%5Cqquad%0A%20%20%20%20%5Csigma'(x)%20%3D%20%5Cfrac%7Be%5E%7B-x%7D%7D%7B%5Cleft(1%2Be%5E%7B-x%7D%5Cright)%5E2%7D%20%3D%20%5Csigma(x)%5Cleft(1-%5Csigma(x)%5Cright)%0A%20%20%20%20%24%24%0A%0A%20%20%20%20%E3%81%93%E3%81%AE%E3%83%AC%E3%82%A4%E3%83%A4%E3%81%AF%E8%A6%81%E7%B4%A0%E3%81%94%E3%81%A8%E3%81%AE%E5%86%99%E5%83%8F%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E5%85%A5%E5%8A%9B%E3%81%8C%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%A7%E3%82%82%E8%A1%8C%E5%88%97%E3%81%A7%E3%82%82%E5%90%8C%E3%81%98%E5%BC%8F%E3%81%A7%E6%9B%B8%E3%81%91%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%24Y%20%3D%20%5Csigma(X)%24%20%E3%81%A8%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E9%80%86%E4%BC%9D%E6%92%AD%E3%81%AF%E8%A6%81%E7%B4%A0%E3%81%94%E3%81%A8%E3%81%AE%E7%A9%8D%EF%BC%88%E3%82%A2%E3%83%80%E3%83%9E%E3%83%BC%E3%83%AB%E7%A9%8D%EF%BC%89%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20X%7D%0A%20%20%20%20%3D%20%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20Y%7D%20%5Codot%20Y%20%5Codot%20%5Cleft(1%20-%20Y%5Cright)%0A%20%20%20%20%24%24%0A%0A%20%20%20%20%E5%B0%8E%E9%96%A2%E6%95%B0%E3%81%8C%20%24%5Csigma%24%20%E3%81%AE**%E5%87%BA%E5%8A%9B**%E3%81%A0%E3%81%91%E3%81%A7%E6%9B%B8%E3%81%91%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%81%60forward%60%20%E3%81%A7%20%60self.out%60%20%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%A6%E3%81%8A%E3%81%91%E3%81%B0%0A%20%20%20%20%60backward%60%20%E3%81%AF%E5%85%A5%E5%8A%9B%E3%82%92%E6%8C%81%E3%81%9F%E3%81%AA%E3%81%8F%E3%81%A6%E3%82%82%E8%A8%88%E7%AE%97%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%E5%85%A5%E5%8A%9B%E3%81%AF%20%24N%20%5Ctimes%20D%24%20%E3%81%AE%E9%85%8D%E5%88%97%E3%80%81%0A%20%20%20%20%E5%87%BA%E5%8A%9B%E3%81%AF%E5%90%8C%E3%81%98%E5%BD%A2%E3%81%AE%E9%85%8D%E5%88%97%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.class_definition%0Aclass%20Sigmoid%3A%0A%20%20%20%20def%20__init__(self)%3A%0A%20%20%20%20%20%20%20%20self.out%20%3D%20None%0A%0A%20%20%20%20def%20forward(self%2C%20x)%3A%0A%20%20%20%20%20%20%20%20self.out%20%3D%201.0%20%2F%20(1.0%20%2B%20np.exp(-x))%0A%20%20%20%20%20%20%20%20return%20self.out%0A%0A%20%20%20%20def%20backward(self%2C%20dout)%3A%0A%20%20%20%20%20%20%20%20return%20dout%20*%20self.out%20*%20(1.0%20-%20self.out)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20Affine%20%E3%83%AC%E3%82%A4%E3%83%A4%0A%0A%20%20%20%20%E3%83%90%E3%83%83%E3%83%81%E3%82%92%E8%A1%8C%E3%81%AB%E4%B8%A6%E3%81%B9%E3%81%9F%E8%A6%8F%E7%B4%84%E3%81%A7%E3%81%AF%E3%80%81%E9%A0%86%E4%BC%9D%E6%92%AD%E3%81%AF%E6%AC%A1%E3%81%AE%E5%BD%A2%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%24W%24%20%E3%81%AF%0A%20%20%20%20%24D_%7B%5Ctext%7Bin%7D%7D%20%5Ctimes%20D_%7B%5Ctext%7Bout%7D%7D%24%E3%80%81%24b%24%20%E3%81%AF%20%24D_%7B%5Ctext%7Bout%7D%7D%24%20%E6%AC%A1%E5%85%83%E3%81%A7%E3%80%81%0A%20%20%20%20%24b%24%20%E3%81%AF%E5%85%A8%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%B8%E5%90%8C%E3%81%98%E5%80%A4%E3%81%8C%E8%B6%B3%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%EF%BC%88%E3%83%96%E3%83%AD%E3%83%BC%E3%83%89%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88%EF%BC%89%E3%80%82%0A%0A%20%20%20%20%24%24%0A%20%20%20%20Y%20%3D%20XW%20%2B%20%5Cmathbf%7B1%7D_N%20b%5E%7B%5Ctop%7D%2C%0A%20%20%20%20%5Cqquad%20X%20%5Cin%20%5Cmathbb%7BR%7D%5E%7BN%20%5Ctimes%20D_%7B%5Ctext%7Bin%7D%7D%7D%2C%5C%20Y%20%5Cin%20%5Cmathbb%7BR%7D%5E%7BN%20%5Ctimes%20D_%7B%5Ctext%7Bout%7D%7D%7D%0A%20%20%20%20%24%24%0A%0A%20%20%20%20%24%5Cpartial%20L%2F%5Cpartial%20Y%24%20%E3%82%92%20%24%5Cmathrm%7Bd%7DY%24%20%E3%81%A8%E6%9B%B8%E3%81%8F%E3%81%A8%E3%80%81%E9%80%A3%E9%8E%96%E5%BE%8B%E3%81%8B%E3%82%893%E3%81%A4%E3%81%AE%E5%8B%BE%E9%85%8D%E3%81%8C%E5%BE%97%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%24W%24%20%E3%81%AE%E5%8B%BE%E9%85%8D%E3%81%A8%20%24b%24%20%E3%81%AE%E5%8B%BE%E9%85%8D%E3%81%AF%E3%83%90%E3%83%83%E3%83%81%E6%96%B9%E5%90%91%E3%81%AB%E5%92%8C%E3%82%92%E5%8F%96%E3%82%8B%E5%BD%A2%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20X%7D%20%3D%20%5Cmathrm%7Bd%7DY%5C%2CW%5E%7B%5Ctop%7D%2C%20%5Cqquad%0A%20%20%20%20%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20W%7D%20%3D%20X%5E%7B%5Ctop%7D%5Cmathrm%7Bd%7DY%2C%20%5Cqquad%0A%20%20%20%20%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20b%7D%20%3D%20%5Csum_%7Bn%3D1%7D%5E%7BN%7D%20%5Cmathrm%7Bd%7DY_%7Bn%2C%3A%7D%0A%20%20%20%20%24%24%0A%0A%20%20%20%20%E5%BD%A2%E3%82%92%E8%BF%BD%E3%81%86%E3%81%A8%E8%BB%A2%E7%BD%AE%E3%81%AE%E4%BD%8D%E7%BD%AE%E3%81%8C%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%24%5Cmathrm%7Bd%7DY%24%20%E3%81%AF%20%24N%20%5Ctimes%20D_%7B%5Ctext%7Bout%7D%7D%24%E3%80%81%0A%20%20%20%20%24W%5E%7B%5Ctop%7D%24%20%E3%81%AF%20%24D_%7B%5Ctext%7Bout%7D%7D%20%5Ctimes%20D_%7B%5Ctext%7Bin%7D%7D%24%20%E3%81%AA%E3%81%AE%E3%81%A7%E7%A9%8D%E3%81%AF%20%24X%24%20%E3%81%A8%E5%90%8C%E3%81%98%0A%20%20%20%20%24N%20%5Ctimes%20D_%7B%5Ctext%7Bin%7D%7D%24%E3%80%81%24X%5E%7B%5Ctop%7D%5Cmathrm%7Bd%7DY%24%20%E3%81%AF%20%24W%24%20%E3%81%A8%E5%90%8C%E3%81%98%0A%20%20%20%20%24D_%7B%5Ctext%7Bin%7D%7D%20%5Ctimes%20D_%7B%5Ctext%7Bout%7D%7D%24%20%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%60forward%60%20%E3%81%AF%E5%85%A5%E5%8A%9B%20%24X%24%20%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%24W%24%20%E3%81%AE%E5%8B%BE%E9%85%8D%E8%A8%88%E7%AE%97%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%A0%E3%81%8B%E3%82%89%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E5%87%BA%E5%8A%9B%E3%81%AF%20%24N%20%5Ctimes%20D_%7B%5Ctext%7Bout%7D%7D%24%20%E3%81%AE%E9%85%8D%E5%88%97%E3%80%81%60backward%60%20%E3%81%AE%E6%88%BB%E3%82%8A%E5%80%A4%E3%81%AF%20%24N%20%5Ctimes%20D_%7B%5Ctext%7Bin%7D%7D%24%20%E3%81%AE%E9%85%8D%E5%88%97%E3%81%A7%E3%80%81%0A%20%20%20%20%E5%89%AF%E4%BD%9C%E7%94%A8%E3%81%A8%E3%81%97%E3%81%A6%20%60dw%60%20%E3%81%A8%20%60db%60%20%E3%81%8C%E6%9B%B4%E6%96%B0%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.class_definition%0A%40dataclass%0Aclass%20Affine%3A%0A%20%20%20%20w%3A%20np.ndarray%0A%20%20%20%20b%3A%20np.ndarray%0A%20%20%20%20x%3A%20np.ndarray%20%7C%20None%20%3D%20None%0A%20%20%20%20dw%3A%20np.ndarray%20%7C%20None%20%3D%20None%0A%20%20%20%20db%3A%20np.ndarray%20%7C%20None%20%3D%20None%0A%0A%20%20%20%20def%20forward(self%2C%20x)%3A%0A%20%20%20%20%20%20%20%20self.x%20%3D%20x%0A%20%20%20%20%20%20%20%20return%20x%20%40%20self.w%20%2B%20self.b%0A%0A%20%20%20%20def%20backward(self%2C%20dout)%3A%0A%20%20%20%20%20%20%20%20self.dw%20%3D%20self.x.T%20%40%20dout%0A%20%20%20%20%20%20%20%20self.db%20%3D%20np.sum(dout%2C%20axis%3D0)%0A%20%20%20%20%20%20%20%20return%20dout%20%40%20self.w.T%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20Softmax%20%E3%81%A8%E4%BA%A4%E5%B7%AE%E3%82%A8%E3%83%B3%E3%83%88%E3%83%AD%E3%83%94%E3%83%BC%0A%0A%20%20%20%20softmax%20%E3%81%AF%E6%8C%87%E6%95%B0%E9%96%A2%E6%95%B0%E3%82%92%E4%BD%BF%E3%81%86%E3%81%9F%E3%82%81%E3%80%81%E5%85%A5%E5%8A%9B%E3%81%8C%E5%A4%A7%E3%81%8D%E3%81%84%E3%81%A8%20%60exp%60%20%E3%81%8C%E3%81%82%E3%81%B5%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%E5%88%86%E5%AD%90%E3%81%A8%E5%88%86%E6%AF%8D%E3%81%AB%E5%90%8C%E3%81%98%0A%20%20%20%20%E5%AE%9A%E6%95%B0%E3%82%92%E6%8E%9B%E3%81%91%E3%81%A6%E3%82%82%E5%80%A4%E3%81%8C%E5%A4%89%E3%82%8F%E3%82%89%E3%81%AA%E3%81%84%E6%80%A7%E8%B3%AA%E3%82%92%E4%BD%BF%E3%81%84%E3%80%81**%E8%A1%8C%E3%81%94%E3%81%A8%E3%81%AE%E6%9C%80%E5%A4%A7%E5%80%A4**%E3%82%92%E5%BC%95%E3%81%84%E3%81%A6%E3%81%8B%E3%82%89%E6%8C%87%E6%95%B0%E3%82%92%E5%8F%96%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E5%BC%95%E3%81%84%E3%81%9F%E5%BE%8C%E3%81%AE%E6%9C%80%E5%A4%A7%E3%81%AE%20logit%20%E3%81%8C0%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%81%E6%8C%87%E6%95%B0%E3%81%AE%E6%9C%80%E5%A4%A7%E5%80%A4%E3%81%8C%20%24e%5E0%3D1%24%20%E3%81%AB%E5%8F%8E%E3%81%BE%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%24%24%0A%20%20%20%20y_%7Bnk%7D%20%3D%20%5Cfrac%7B%5Cexp%5Cleft(a_%7Bnk%7D%20-%20C_n%5Cright)%7D%7B%5Csum_%7Bi%7D%20%5Cexp%5Cleft(a_%7Bni%7D%20-%20C_n%5Cright)%7D%2C%0A%20%20%20%20%5Cqquad%20C_n%20%3D%20%5Cmax_%7Bi%7D%20a_%7Bni%7D%0A%20%20%20%20%24%24%0A%0A%20%20%20%20%E4%BA%A4%E5%B7%AE%E3%82%A8%E3%83%B3%E3%83%88%E3%83%AD%E3%83%94%E3%83%BC%E3%81%AF%E5%AF%BE%E6%95%B0%E3%82%92%E5%8F%96%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E7%A2%BA%E7%8E%87%E3%81%8C0%E3%81%AB%E8%BF%91%E3%81%84%E3%81%A8%20%24%5Clog%20y%24%20%E3%81%8C%20%24-%5Cinfty%24%20%E3%81%B8%E3%80%81%0A%20%20%20%20%E3%81%97%E3%81%9F%E3%81%8C%E3%81%A3%E3%81%A6%E6%90%8D%E5%A4%B1%20%24-%5Clog%20y%24%20%E3%81%8C%20%24%2B%5Cinfty%24%20%E3%81%B8%E7%99%BA%E6%95%A3%E3%81%97%E3%81%BE%E3%81%99%E3%80%82softmax%20%E3%81%AE%E5%87%BA%E5%8A%9B%E3%82%92%E7%B5%8C%E7%94%B1%E3%81%97%E3%81%A6%E3%81%8B%E3%82%89%0A%20%20%20%20%E5%AF%BE%E6%95%B0%E3%82%92%E5%8F%96%E3%82%8B%E3%81%A8%E3%80%81%E5%B0%8F%E3%81%95%E3%81%84%E7%A2%BA%E7%8E%87%E3%81%8C%E4%B8%B8%E3%82%81%E3%81%A70%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E6%99%82%E7%82%B9%E3%81%A7%E8%A8%88%E7%AE%97%E3%81%8C%E5%A3%8A%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82logit%20%E3%81%8B%E3%82%89%0A%20%20%20%20log-sum-exp%20%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E5%AF%BE%E6%95%B0%E7%A2%BA%E7%8E%87%E3%82%92%E7%9B%B4%E6%8E%A5%E6%B1%82%E3%82%81%E3%82%8C%E3%81%B0%E3%80%81%E3%81%93%E3%81%AE%E4%B8%B8%E3%82%81%E3%82%92%E7%B5%8C%E7%94%B1%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%24a_%7Bnk%7D%20-%20C_n%20%5Cle%200%24%20%E3%81%AA%E3%81%AE%E3%81%A7%E6%8C%87%E6%95%B0%E3%81%AF%E3%81%82%E3%81%B5%E3%82%8C%E3%81%9A%E3%80%81%E5%AF%BE%E6%95%B0%E3%81%AE%E5%BC%95%E6%95%B0%E3%82%821%E4%BB%A5%E4%B8%8A%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%83%90%E3%83%83%E3%83%81%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E3%81%AF%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%94%E3%81%A8%E3%81%AE%E5%80%A4%E3%81%AE%E5%B9%B3%E5%9D%87%E3%82%92%E6%90%8D%E5%A4%B1%E3%81%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%24%24%0A%20%20%20%20%5Clog%20y_%7Bnk%7D%20%3D%20%5Cleft(a_%7Bnk%7D%20-%20C_n%5Cright)%20-%20%5Clog%20%5Csum_%7Bi%7D%20%5Cexp%5Cleft(a_%7Bni%7D%20-%20C_n%5Cright)%0A%20%20%20%20%24%24%0A%0A%20%20%20%20%24%24%0A%20%20%20%20L%20%3D%20-%5Cfrac%7B1%7D%7BN%7D%5Csum_%7Bn%3D1%7D%5E%7BN%7D%5Csum_%7Bk%7D%20t_%7Bnk%7D%20%5Clog%20y_%7Bnk%7D%0A%20%20%20%20%24%24%0A%0A%20%20%20%20softmax%20%E3%81%A8%E4%BA%A4%E5%B7%AE%E3%82%A8%E3%83%B3%E3%83%88%E3%83%AD%E3%83%94%E3%83%BC%E3%82%921%E3%81%A4%E3%81%AE%E3%83%AC%E3%82%A4%E3%83%A4%E3%81%AB%E3%81%BE%E3%81%A8%E3%82%81%E3%82%8B%E5%88%A9%E7%82%B9%E3%81%AF%E3%80%81%E9%80%86%E4%BC%9D%E6%92%AD%E3%81%8C%E6%AC%A1%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%0A%20%20%20%20%E5%BC%95%E3%81%8D%E7%AE%97%E3%81%A0%E3%81%91%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%E3%80%82%E5%80%8B%E5%88%A5%E3%81%AB%E5%BE%AE%E5%88%86%E3%81%99%E3%82%8B%E3%81%A8%E5%95%86%E3%81%AE%E5%BE%AE%E5%88%86%E3%81%8C%E7%8F%BE%E3%82%8C%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E5%90%88%E6%88%90%E3%81%99%E3%82%8B%E3%81%A8%E6%89%93%E3%81%A1%E6%B6%88%E3%81%97%E5%90%88%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E6%90%8D%E5%A4%B1%E3%82%92%E3%83%90%E3%83%83%E3%83%81%E5%B9%B3%E5%9D%87%E3%81%A7%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%9F%E3%81%AE%E3%81%A7%E3%80%81%E5%8B%BE%E9%85%8D%E3%82%82%20%24N%24%20%E3%81%A7%E5%89%B2%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E5%BE%AE%E5%B0%8F%E9%87%8F%E3%82%92%E8%B6%B3%E3%81%97%E3%81%A6%E5%AF%BE%E6%95%B0%E3%82%92%E5%AE%88%E3%82%8B%E5%AE%9F%E8%A3%85%E3%81%A0%E3%81%A8%0A%20%20%20%20%E3%81%93%E3%81%AE%E5%BC%8F%E3%81%AF%E8%BF%91%E4%BC%BC%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81log-sum-exp%20%E3%81%A7%E8%A8%88%E7%AE%97%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%A7%E5%8E%B3%E5%AF%86%E3%81%AB%E6%88%90%E3%82%8A%E7%AB%8B%E3%81%A1%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20A%7D%20%3D%20%5Cfrac%7BY%20-%20T%7D%7BN%7D%0A%20%20%20%20%24%24%0A%0A%20%20%20%20%60forward%60%20%E3%81%AE%E5%85%A5%E5%8A%9B%E3%81%AF%20Affine%20%E3%81%AE%E5%87%BA%E5%8A%9B%EF%BC%88logit%EF%BC%89%E3%81%A8%20one-hot%20%E3%81%AE%E6%AD%A3%E8%A7%A3%E3%81%A7%E3%80%81%E5%87%BA%E5%8A%9B%E3%81%AF%E3%82%B9%E3%82%AB%E3%83%A9%E3%83%BC%E3%81%AE%E6%90%8D%E5%A4%B1%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%60backward%60%20%E3%81%AE%E6%88%BB%E3%82%8A%E5%80%A4%E3%81%AF%20logit%20%E3%81%A8%E5%90%8C%E3%81%98%20%24N%20%5Ctimes%2010%24%20%E3%81%AE%E9%85%8D%E5%88%97%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20softmax(x)%3A%0A%20%20%20%20%20%20%20%20shifted%20%3D%20x%20-%20np.max(x%2C%20axis%3D1%2C%20keepdims%3DTrue)%0A%20%20%20%20%20%20%20%20exp_x%20%3D%20np.exp(shifted)%0A%20%20%20%20%20%20%20%20return%20exp_x%20%2F%20np.sum(exp_x%2C%20axis%3D1%2C%20keepdims%3DTrue)%0A%0A%20%20%20%20def%20cross_entropy_error(logits%2C%20y_true)%3A%0A%20%20%20%20%20%20%20%20shifted%20%3D%20logits%20-%20np.max(logits%2C%20axis%3D1%2C%20keepdims%3DTrue)%0A%20%20%20%20%20%20%20%20log_probs%20%3D%20shifted%20-%20np.log(np.sum(np.exp(shifted)%2C%20axis%3D1%2C%20keepdims%3DTrue))%0A%20%20%20%20%20%20%20%20return%20-np.mean(np.sum(y_true%20*%20log_probs%2C%20axis%3D1))%0A%0A%20%20%20%20%40dataclass%0A%20%20%20%20class%20SoftmaxWithLoss%3A%0A%20%20%20%20%20%20%20%20loss%3A%20float%20%7C%20None%20%3D%20None%0A%20%20%20%20%20%20%20%20y_pred%3A%20np.ndarray%20%7C%20None%20%3D%20None%0A%20%20%20%20%20%20%20%20y_true%3A%20np.ndarray%20%7C%20None%20%3D%20None%0A%0A%20%20%20%20%20%20%20%20def%20forward(self%2C%20x%2C%20y_true)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20self.y_true%20%3D%20y_true%0A%20%20%20%20%20%20%20%20%20%20%20%20self.y_pred%20%3D%20softmax(x)%0A%20%20%20%20%20%20%20%20%20%20%20%20self.loss%20%3D%20cross_entropy_error(x%2C%20y_true)%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20self.loss%0A%0A%20%20%20%20%20%20%20%20def%20backward(self%2C%20dout%3D1.0)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20dout%20*%20(self.y_pred%20-%20self.y_true)%20%2F%20self.y_true.shape%5B0%5D%0A%0A%20%20%20%20return%20(SoftmaxWithLoss%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AE%E7%B5%84%E3%81%BF%E7%AB%8B%E3%81%A6%0A%0A%20%20%20%20Affine%20%E2%86%92%20Sigmoid%20%E2%86%92%20Affine%20%E2%86%92%20Sigmoid%20%E2%86%92%20Affine%20%E3%81%AE5%E5%B1%A4%E3%82%92%20%60OrderedDict%60%20%E3%81%AB%E9%A0%86%E7%95%AA%E3%81%AB%E7%A9%8D%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%2064%E6%AC%A1%E5%85%83%E3%81%AE%E5%85%A5%E5%8A%9B%E3%82%9264%E3%80%8132%E3%81%A8%E5%A4%89%E6%8F%9B%E3%81%97%E3%80%81%E6%9C%80%E5%BE%8C%E3%81%AB10%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AE%20logit%20%E3%82%92%E5%87%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%60predict%60%20%E3%81%AF%E3%81%93%E3%81%AE%E9%A0%86%E3%81%AB%20%60forward%60%20%E3%82%92%E5%91%BC%E3%81%B6%E3%81%A0%E3%81%91%E3%80%81%60gradient%60%20%E3%81%AF%E9%80%86%E9%A0%86%E3%81%AB%20%60backward%60%20%E3%82%92%E5%91%BC%E3%81%B6%E3%81%A0%E3%81%91%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20**%E9%87%8D%E3%81%BF%E3%81%AE%E5%88%9D%E6%9C%9F%E5%80%A4%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB%E3%81%AF%E5%AD%A6%E7%BF%92%E3%81%AE%E9%80%B2%E3%81%BF%E6%96%B9%E3%82%92%E5%A4%A7%E3%81%8D%E3%81%8F%E5%B7%A6%E5%8F%B3%E3%81%97%E3%81%BE%E3%81%99%E3%80%82**%20%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%20Xavier%20%E3%81%AE%E5%88%9D%E6%9C%9F%E5%8C%96%E3%82%92%E4%BD%BF%E3%81%84%E3%80%81%0A%20%20%20%20%E5%B1%A4%E3%81%94%E3%81%A8%E3%81%AB%E5%85%A5%E5%8A%9B%E6%AC%A1%E5%85%83%20%24D_%7B%5Ctext%7Bin%7D%7D%24%20%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6%E6%A8%99%E6%BA%96%E5%81%8F%E5%B7%AE%E3%82%92%E5%A4%89%E3%81%88%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%24%24%0A%20%20%20%20W%20%5Csim%20%5Cmathcal%7BN%7D%5C!%5Cleft(0%2C%20%5Cfrac%7B1%7D%7BD_%7B%5Ctext%7Bin%7D%7D%7D%5Cright)%2C%0A%20%20%20%20%5Cqquad%20%5Ctext%7B%E6%A8%99%E6%BA%96%E5%81%8F%E5%B7%AE%7D%20%3D%20%5Cfrac%7B1%7D%7B%5Csqrt%7BD_%7B%5Ctext%7Bin%7D%7D%7D%7D%0A%20%20%20%20%24%24%0A%0A%20%20%20%20%E5%85%A5%E5%8A%9B%E6%AC%A1%E5%85%83%E3%81%8C%E5%A4%A7%E3%81%8D%E3%81%84%E3%81%BB%E3%81%A9%E5%92%8C%E3%82%92%E5%8F%96%E3%82%8B%E9%A0%85%E6%95%B0%E3%81%8C%E5%A2%97%E3%81%88%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%811%E9%A0%85%E3%81%82%E3%81%9F%E3%82%8A%E3%81%AE%E5%A4%A7%E3%81%8D%E3%81%95%E3%82%92%E5%B0%8F%E3%81%95%E3%81%8F%E3%81%97%E3%81%A6%0A%20%20%20%20%E3%83%AC%E3%82%A4%E3%83%A4%E3%82%92%E9%80%9A%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AE%E5%88%86%E6%95%A3%E3%82%92%E6%8F%83%E3%81%88%E3%82%8B%E3%80%81%E3%81%A8%E3%81%84%E3%81%86%E8%80%83%E3%81%88%E6%96%B9%E3%81%A7%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%20notebook%20%E3%81%AE%E6%A7%8B%E6%88%90%E3%81%A7%E3%81%AF%0A%20%20%20%20%24D_%7B%5Ctext%7Bin%7D%7D%3D64%24%20%E3%81%AE%E5%B1%A4%E3%81%A7%200.125%E3%80%81%24D_%7B%5Ctext%7Bin%7D%7D%3D32%24%20%E3%81%AE%E5%B1%A4%E3%81%A7%200.177%20%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E5%BE%8C%E3%81%AE%E7%AF%80%E3%81%A7%E3%80%81%E3%81%93%E3%82%8C%E3%82%92%E5%AE%9A%E6%95%B0%200.05%20%E3%81%AB%E5%9B%BA%E5%AE%9A%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%A8%E6%AF%94%E8%BC%83%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E5%AE%9F%E8%A3%85%E4%B8%8A%E3%81%AE%E6%B3%A8%E6%84%8F%E3%81%8C1%E3%81%A4%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%60self.layers%60%20%E3%81%AE%E5%90%84%20Affine%20%E3%81%AF%20%60self.params%60%20%E3%81%AE%E9%85%8D%E5%88%97%E3%82%92%0A%20%20%20%20**%E5%90%8C%E3%81%98%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%A8%E3%81%97%E3%81%A6**%E5%8F%82%E7%85%A7%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E3%81%9D%E3%81%AE%E3%81%9F%E3%82%81%E5%AD%A6%E7%BF%92%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AE%0A%20%20%20%20%60params%5Bkey%5D%20-%3D%20lr%20*%20grad%5Bkey%5D%60%20%E3%81%A8%E3%81%84%E3%81%86**%E3%81%9D%E3%81%AE%E5%A0%B4%E3%81%A7%E3%81%AE**%E6%9B%B4%E6%96%B0%E3%81%AF%E3%83%AC%E3%82%A4%E3%83%A4%E5%81%B4%E3%81%AB%E3%82%82%E5%8F%8D%E6%98%A0%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%81%93%E3%81%93%E3%82%92%20%60params%5Bkey%5D%20%3D%20params%5Bkey%5D%20-%20lr%20*%20grad%5Bkey%5D%60%20%E3%81%A8%E6%9B%B8%E3%81%8F%E3%81%A8%E6%96%B0%E3%81%97%E3%81%84%E9%85%8D%E5%88%97%E3%81%AB%E6%9D%9F%E3%81%AD%E7%9B%B4%E3%81%95%E3%82%8C%E3%80%81%0A%20%20%20%20%E3%83%AC%E3%82%A4%E3%83%A4%E3%81%AF%E5%8F%A4%E3%81%84%E9%85%8D%E5%88%97%E3%82%92%E5%8F%82%E7%85%A7%E3%81%97%E3%81%9F%E3%81%BE%E3%81%BE%E3%81%AB%E3%81%AA%E3%82%8A%E3%80%81%E3%81%BE%E3%81%A3%E3%81%9F%E3%81%8F%E5%AD%A6%E7%BF%92%E3%81%8C%E9%80%B2%E3%81%BF%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(SoftmaxWithLoss)%3A%0A%20%20%20%20class%20MyNet%3A%0A%20%20%20%20%20%20%20%20def%20__init__(self%2C%20input_size%2C%20hidden_sizes%2C%20output_size%2C%20rng)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20def%20xavier(fan_in%2C%20fan_out)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20np.sqrt(1.0%20%2F%20fan_in)%20*%20rng.standard_normal((fan_in%2C%20fan_out))%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20self.params%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22W1%22%3A%20xavier(input_size%2C%20hidden_sizes%5B0%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22b1%22%3A%20np.zeros(hidden_sizes%5B0%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22W2%22%3A%20xavier(hidden_sizes%5B0%5D%2C%20hidden_sizes%5B1%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22b2%22%3A%20np.zeros(hidden_sizes%5B1%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22W3%22%3A%20xavier(hidden_sizes%5B1%5D%2C%20output_size)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22b3%22%3A%20np.zeros(output_size)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20self.layers%20%3D%20OrderedDict(%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(%22Affine1%22%2C%20Affine(self.params%5B%22W1%22%5D%2C%20self.params%5B%22b1%22%5D))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(%22Sigmoid1%22%2C%20Sigmoid())%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(%22Affine2%22%2C%20Affine(self.params%5B%22W2%22%5D%2C%20self.params%5B%22b2%22%5D))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(%22Sigmoid2%22%2C%20Sigmoid())%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(%22Affine3%22%2C%20Affine(self.params%5B%22W3%22%5D%2C%20self.params%5B%22b3%22%5D))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20self.last_layer%20%3D%20SoftmaxWithLoss()%0A%0A%20%20%20%20%20%20%20%20def%20predict(self%2C%20x)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20layer%20in%20self.layers.values()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20x%20%3D%20layer.forward(x)%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20x%0A%0A%20%20%20%20%20%20%20%20def%20loss(self%2C%20x%2C%20y_true)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20self.last_layer.forward(self.predict(x)%2C%20y_true)%0A%0A%20%20%20%20%20%20%20%20def%20accuracy(self%2C%20x%2C%20y_true)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20logits%20%3D%20self.predict(x)%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20float(np.mean(np.argmax(logits%2C%20axis%3D1)%20%3D%3D%20np.argmax(y_true%2C%20axis%3D1)))%0A%0A%20%20%20%20%20%20%20%20def%20gradient(self%2C%20x%2C%20y_true)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20self.loss(x%2C%20y_true)%0A%20%20%20%20%20%20%20%20%20%20%20%20dout%20%3D%20self.last_layer.backward()%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20layer%20in%20reversed(list(self.layers.values()))%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dout%20%3D%20layer.backward(dout)%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22W1%22%3A%20self.layers%5B%22Affine1%22%5D.dw%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22b1%22%3A%20self.layers%5B%22Affine1%22%5D.db%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22W2%22%3A%20self.layers%5B%22Affine2%22%5D.dw%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22b2%22%3A%20self.layers%5B%22Affine2%22%5D.db%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22W3%22%3A%20self.layers%5B%22Affine3%22%5D.dw%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22b3%22%3A%20self.layers%5B%22Affine3%22%5D.db%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20return%20(MyNet%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E5%8B%BE%E9%85%8D%E7%A2%BA%E8%AA%8D%0A%0A%20%20%20%20%E9%80%86%E4%BC%9D%E6%92%AD%E3%81%AF%E5%BC%8F%E3%82%92%E6%89%8B%E3%81%A7%E5%B0%8E%E3%81%84%E3%81%A6%E5%AE%9F%E8%A3%85%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%81%E9%96%93%E9%81%95%E3%81%88%E3%81%A6%E3%82%82%E6%90%8D%E5%A4%B1%E3%81%8C%E3%81%9D%E3%82%8C%E3%82%89%E3%81%97%E3%81%8F%E4%B8%8B%E3%81%8C%E3%81%A3%E3%81%A6%E3%81%97%E3%81%BE%E3%81%84%E3%80%81%0A%20%20%20%20%E8%AA%A4%E3%82%8A%E3%81%AB%E6%B0%97%E4%BB%98%E3%81%91%E3%81%AA%E3%81%84%E3%81%93%E3%81%A8%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E3%81%9D%E3%81%93%E3%81%A7%E3%80%81%E8%A7%A3%E6%9E%90%E7%9A%84%E3%81%AB%E6%B1%82%E3%82%81%E3%81%9F%E5%8B%BE%E9%85%8D%E3%82%92%E6%95%B0%E5%80%A4%E5%BE%AE%E5%88%86%E3%81%A8%E7%AA%81%E3%81%8D%E5%90%88%E3%82%8F%E3%81%9B%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E4%B8%AD%E5%BF%83%E5%B7%AE%E5%88%86%E3%81%AF%E6%AC%A1%E3%81%AE%E5%BC%8F%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20%5Ctheta%7D%20%5Csimeq%20%5Cfrac%7BL(%5Ctheta%20%2B%20h)%20-%20L(%5Ctheta%20-%20h)%7D%7B2h%7D%0A%20%20%20%20%24%24%0A%0A%20%20%20%20%E6%89%93%E3%81%A1%E5%88%87%E3%82%8A%E8%AA%A4%E5%B7%AE%E3%81%AF%20%24O(h%5E2)%24%20%E3%81%A7%E6%B8%9B%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%24h%24%20%E3%82%92%E5%B0%8F%E3%81%95%E3%81%8F%E3%81%97%E3%81%99%E3%81%8E%E3%82%8B%E3%81%A8%E5%BC%95%E3%81%8D%E7%AE%97%E3%81%AE%E6%A1%81%E8%90%BD%E3%81%A1%E3%81%8C%E5%8A%B9%E3%81%84%E3%81%A6%0A%20%20%20%20%E3%81%8B%E3%81%88%E3%81%A3%E3%81%A6%E6%82%AA%E5%8C%96%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%20%24h%3D10%5E%7B-5%7D%24%20%E3%82%92%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E5%85%A8%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E6%95%B0%E5%80%A4%E5%BE%AE%E5%88%86%E3%81%99%E3%82%8B%E3%81%A8%E9%87%8D%E3%81%84%E3%81%AE%E3%81%A7%E3%80%81%E5%90%84%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E9%85%8D%E5%88%97%E3%81%8B%E3%82%895%E7%AE%87%E6%89%80%E3%81%9A%E3%81%A4%E6%8A%9C%E3%81%8D%E5%87%BA%E3%81%97%E3%81%A6%E6%AF%94%E3%81%B9%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E6%8A%9C%E3%81%8D%E5%8F%96%E3%82%8A%E6%A4%9C%E6%9F%BB%E3%81%AA%E3%81%AE%E3%81%A7%E5%AE%9F%E8%A3%85%E5%85%A8%E4%BD%93%E3%81%AE%E6%AD%A3%E3%81%97%E3%81%95%E3%82%92%E8%A8%BC%E6%98%8E%E3%81%99%E3%82%8B%E3%82%82%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%81%8C%E3%80%81%0A%20%20%20%20%E8%AA%A4%E5%B7%AE%E3%81%8C%E5%8D%81%E5%88%86%E5%B0%8F%E3%81%95%E3%81%91%E3%82%8C%E3%81%B0%E5%AE%9F%E8%A3%85%E3%81%8C%E6%AD%A3%E3%81%97%E3%81%84%E3%81%A8%E3%81%84%E3%81%86%E7%A2%BA%E4%BF%A1%E3%81%AF%E5%A4%A7%E3%81%8D%E3%81%8F%E9%AB%98%E3%81%BE%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E7%B5%B6%E5%AF%BE%E8%AA%A4%E5%B7%AE%E3%81%A8%E7%9B%B8%E5%AF%BE%E8%AA%A4%E5%B7%AE%E3%81%AE%E4%B8%A1%E6%96%B9%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(MyNet%2C%20x_train%2C%20y_train)%3A%0A%20%20%20%20_check_rng%20%3D%20np.random.default_rng(0)%0A%20%20%20%20_check_net%20%3D%20MyNet(input_size%3Dx_train.shape%5B1%5D%2C%20hidden_sizes%3D%5B8%2C%206%5D%2C%20output_size%3D10%2C%20rng%3D_check_rng)%0A%20%20%20%20_x_check%20%3D%20x_train%5B%3A5%5D%0A%20%20%20%20_y_check%20%3D%20y_train%5B%3A5%5D%0A%20%20%20%20_analytic%20%3D%20_check_net.gradient(_x_check%2C%20_y_check)%0A%0A%20%20%20%20_h%20%3D%201e-5%0A%20%20%20%20_rows%20%3D%20%5B%5D%0A%20%20%20%20for%20_name%2C%20_param%20in%20_check_net.params.items()%3A%0A%20%20%20%20%20%20%20%20_flat%20%3D%20_param.ravel()%0A%20%20%20%20%20%20%20%20_positions%20%3D%20_check_rng.choice(_flat.size%2C%20size%3Dmin(5%2C%20_flat.size)%2C%20replace%3DFalse)%0A%20%20%20%20%20%20%20%20_worst_absolute%20%3D%200.0%0A%20%20%20%20%20%20%20%20_worst_relative%20%3D%200.0%0A%20%20%20%20%20%20%20%20for%20_position%20in%20_positions%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_original%20%3D%20_flat%5B_position%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20_flat%5B_position%5D%20%3D%20_original%20%2B%20_h%0A%20%20%20%20%20%20%20%20%20%20%20%20_loss_plus%20%3D%20_check_net.loss(_x_check%2C%20_y_check)%0A%20%20%20%20%20%20%20%20%20%20%20%20_flat%5B_position%5D%20%3D%20_original%20-%20_h%0A%20%20%20%20%20%20%20%20%20%20%20%20_loss_minus%20%3D%20_check_net.loss(_x_check%2C%20_y_check)%0A%20%20%20%20%20%20%20%20%20%20%20%20_flat%5B_position%5D%20%3D%20_original%0A%20%20%20%20%20%20%20%20%20%20%20%20_numeric%20%3D%20(_loss_plus%20-%20_loss_minus)%20%2F%20(2.0%20*%20_h)%0A%20%20%20%20%20%20%20%20%20%20%20%20_exact%20%3D%20_analytic%5B_name%5D.ravel()%5B_position%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20_absolute%20%3D%20abs(_numeric%20-%20_exact)%0A%20%20%20%20%20%20%20%20%20%20%20%20_worst_absolute%20%3D%20max(_worst_absolute%2C%20_absolute)%0A%20%20%20%20%20%20%20%20%20%20%20%20_worst_relative%20%3D%20max(_worst_relative%2C%20_absolute%20%2F%20max(1e-12%2C%20abs(_numeric)%20%2B%20abs(_exact)))%0A%20%20%20%20%20%20%20%20_rows.append(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22parameter%22%3A%20_name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22checked_entries%22%3A%20len(_positions)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22max_absolute_error%22%3A%20f%22%7B_worst_absolute%3A.2e%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22max_relative_error%22%3A%20f%22%7B_worst_relative%3A.2e%7D%22%2C%0A%20%20%20%20%20%20%20%20%7D)%0A%20%20%20%20gradient_check_frame%20%3D%20pd.DataFrame(_rows)%0A%20%20%20%20gradient_check_frame%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E5%AD%A6%E7%BF%92%0A%0A%20%20%20%20%E7%A2%BA%E7%8E%87%E7%9A%84%E5%8B%BE%E9%85%8D%E9%99%8D%E4%B8%8B%E6%B3%95%E3%81%A7%E5%AD%A6%E7%BF%92%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E6%AF%8E%E5%9B%9E%E3%80%81%E5%AD%A6%E7%BF%92%E3%83%87%E3%83%BC%E3%82%BF%E3%81%8B%E3%82%89%E9%87%8D%E8%A4%87%E3%81%AA%E3%81%97%E3%81%A764%E4%BB%B6%E3%82%92%E9%81%B8%E3%81%B3%E3%80%81%0A%20%20%20%20%E3%81%9D%E3%81%AE%E5%8B%BE%E9%85%8D%E3%81%A7%E5%85%A8%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E6%9B%B4%E6%96%B0%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%AD%A6%E7%BF%92%E7%8E%87%E3%81%AF0.5%E3%80%81%E5%8F%8D%E5%BE%A9%E5%9B%9E%E6%95%B0%E3%81%AF3%2C000%E5%9B%9E%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%201%2C347%E4%BB%B6%E3%81%AE%E5%AD%A6%E7%BF%92%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%203000%20%C3%97%2064%20%2F%201347%20%E2%89%92%20143%20%E3%82%A8%E3%83%9D%E3%83%83%E3%82%AF%E3%81%AB%E7%9B%B8%E5%BD%93%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%24%24%0A%20%20%20%20%5Ctheta%20%5Cleftarrow%20%5Ctheta%20-%20%5Ceta%20%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20%5Ctheta%7D%2C%20%5Cqquad%20%5Ceta%20%3D%200.5%0A%20%20%20%20%24%24%0A%0A%20%20%20%20%E5%88%9D%E5%9B%9E%E3%81%A820%E5%9B%9E%E3%81%94%E3%81%A8%E3%81%AB%E3%80%81%E3%81%9D%E3%81%AE%E3%83%9F%E3%83%8B%E3%83%90%E3%83%83%E3%83%81%E3%81%AE%E6%90%8D%E5%A4%B1%E3%81%A8%E3%80%81%E5%AD%A6%E7%BF%92%E3%83%87%E3%83%BC%E3%82%BF%E3%83%BB%E6%A4%9C%E8%A8%BC%E3%83%87%E3%83%BC%E3%82%BF%E5%85%A8%E4%BD%93%E3%81%AE%E6%AD%A3%E8%A7%A3%E7%8E%87%E3%82%92%E8%A8%98%E9%8C%B2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E6%90%8D%E5%A4%B1%E3%81%AF%E6%9B%B4%E6%96%B0%E5%BE%8C%E3%81%AB%E6%B8%AC%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%81%E3%81%9D%E3%81%AE%E5%8F%8D%E5%BE%A9%E3%81%AE%E7%B5%90%E6%9E%9C%E3%82%92%E8%A1%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E6%AF%94%E8%BC%83%E3%81%AE%E7%9B%AE%E5%AE%89%E3%81%A8%E3%81%97%E3%81%A6%E3%80%8110%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E5%BD%93%E3%81%A6%E3%81%9A%E3%81%A3%E3%81%BD%E3%81%86%E3%81%AB%E7%AD%94%E3%81%88%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AE%E4%BA%A4%E5%B7%AE%E3%82%A8%E3%83%B3%E3%83%88%E3%83%AD%E3%83%94%E3%83%BC%E3%81%AF%0A%20%20%20%20%24%5Clog%2010%20%5Capprox%202.303%24%E3%80%81%E6%AD%A3%E8%A7%A3%E7%8E%87%E3%81%AF0.1%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(MyNet%2C%20x_train%2C%20x_validation%2C%20y_train%2C%20y_validation)%3A%0A%20%20%20%20rng%20%3D%20np.random.default_rng(71)%0A%20%20%20%20network%20%3D%20MyNet(input_size%3Dx_train.shape%5B1%5D%2C%20hidden_sizes%3D%5B64%2C%2032%5D%2C%20output_size%3Dy_train.shape%5B1%5D%2C%20rng%3Drng)%0A%20%20%20%20history_rows%20%3D%20%5B%5D%0A%20%20%20%20for%20iteration%20in%20range(1%2C%203001)%3A%0A%20%20%20%20%20%20%20%20batch_indices%20%3D%20rng.choice(len(x_train)%2C%20size%3D64%2C%20replace%3DFalse)%0A%20%20%20%20%20%20%20%20x_batch%20%3D%20x_train%5Bbatch_indices%5D%0A%20%20%20%20%20%20%20%20y_batch%20%3D%20y_train%5Bbatch_indices%5D%0A%20%20%20%20%20%20%20%20gradients%20%3D%20network.gradient(x_batch%2C%20y_batch)%0A%20%20%20%20%20%20%20%20for%20key%20in%20gradients%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20network.params%5Bkey%5D%20-%3D%200.5%20*%20gradients%5Bkey%5D%0A%20%20%20%20%20%20%20%20if%20iteration%20%3D%3D%201%20or%20iteration%20%25%2020%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20history_rows.append(%7B%22iteration%22%3A%20iteration%2C%20%22loss%22%3A%20network.loss(x_batch%2C%20y_batch)%2C%20%22train_accuracy%22%3A%20network.accuracy(x_train%2C%20y_train)%2C%20%22validation_accuracy%22%3A%20network.accuracy(x_validation%2C%20y_validation)%7D)%0A%0A%20%20%20%20history_frame%20%3D%20pd.DataFrame(history_rows)%0A%20%20%20%20return%20history_frame%2C%20network%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E8%A8%98%E9%8C%B2%E3%81%AE%E6%9C%AB%E5%B0%BE5%E8%A1%8C%E3%81%A7%E3%81%99%E3%80%82%E6%90%8D%E5%A4%B1%E3%81%8C%E5%BD%93%E3%81%A6%E3%81%9A%E3%81%A3%E3%81%BD%E3%81%86%E3%81%AE2.303%E3%81%8B%E3%82%89%E5%A4%A7%E3%81%8D%E3%81%8F%E4%B8%8B%E3%81%8C%E3%82%8A%E3%80%81%0A%20%20%20%20%E5%AD%A6%E7%BF%92%E3%83%87%E3%83%BC%E3%82%BF%E3%81%A8%E6%A4%9C%E8%A8%BC%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E6%AD%A3%E8%A7%A3%E7%8E%87%E3%81%8C%E6%8F%83%E3%81%A3%E3%81%A6%E4%B8%8A%E3%81%8C%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8C%E3%81%B0%E3%80%81%E5%AD%A6%E7%BF%92%E3%81%AF%E6%88%90%E5%8A%9F%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(history_frame)%3A%0A%20%20%20%20history_frame.tail()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%B7%A6%E3%81%AF%E3%83%9F%E3%83%8B%E3%83%90%E3%83%83%E3%83%81%E6%90%8D%E5%A4%B1%E3%80%81%E5%8F%B3%E3%81%AF%E6%AD%A3%E8%A7%A3%E7%8E%87%E3%81%AE%E6%8E%A8%E7%A7%BB%E3%81%A7%E3%81%99%E3%80%82%E3%83%9F%E3%83%8B%E3%83%90%E3%83%83%E3%83%81%E6%90%8D%E5%A4%B1%E3%81%AF64%E4%BB%B6%E3%81%A0%E3%81%91%E3%81%A7%E6%B8%AC%E3%82%8B%E3%81%9F%E3%82%81%0A%20%20%20%20%E4%B8%8A%E4%B8%8B%E3%81%AB%E6%8C%AF%E3%82%8C%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E5%85%A8%E4%BD%93%E3%81%AE%E5%82%BE%E5%90%91%E3%81%AF%E4%B8%8B%E9%99%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%8F%B3%E3%81%AE%E5%9B%B3%E3%81%A7%E5%AD%A6%E7%BF%92%E7%94%A8%E3%81%A8%E6%A4%9C%E8%A8%BC%E7%94%A8%E3%81%AE%E6%9B%B2%E7%B7%9A%E3%81%8C%0A%20%20%20%20%E5%A4%A7%E3%81%8D%E3%81%8F%E9%9B%A2%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B0%E3%80%81%E6%A5%B5%E7%AB%AF%E3%81%AA%E9%81%8E%E5%AD%A6%E7%BF%92%E3%81%AF%E8%B5%B7%E3%81%8D%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(history_frame)%3A%0A%20%20%20%20_fig%2C%20_axes%20%3D%20plt.subplots(1%2C%202%2C%20figsize%3D(10%2C%204))%0A%20%20%20%20_axes%5B0%5D.plot(history_frame%5B%22iteration%22%5D%2C%20history_frame%5B%22loss%22%5D%2C%20marker%3D%22o%22%2C%20markersize%3D3)%0A%20%20%20%20_axes%5B0%5D.axhline(np.log(10.0)%2C%20color%3D%22tab%3Ared%22%2C%20linestyle%3D%22--%22%2C%20label%3D%22chance%20level%22)%0A%20%20%20%20_axes%5B0%5D.set_xlabel(%22iteration%22)%0A%20%20%20%20_axes%5B0%5D.set_title(%22mini-batch%20loss%22)%0A%20%20%20%20_axes%5B0%5D.legend()%0A%20%20%20%20_axes%5B1%5D.plot(history_frame%5B%22iteration%22%5D%2C%20history_frame%5B%22train_accuracy%22%5D%2C%20label%3D%22train%22)%0A%20%20%20%20_axes%5B1%5D.plot(history_frame%5B%22iteration%22%5D%2C%20history_frame%5B%22validation_accuracy%22%5D%2C%20label%3D%22validation%22)%0A%20%20%20%20_axes%5B1%5D.set_xlabel(%22iteration%22)%0A%20%20%20%20_axes%5B1%5D.set_ylim(0.0%2C%201.0)%0A%20%20%20%20_axes%5B1%5D.legend()%0A%20%20%20%20_axes%5B1%5D.set_title(%22accuracy%22)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E5%88%9D%E6%9C%9F%E5%80%A4%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB%E3%81%AE%E5%BD%B1%E9%9F%BF%0A%0A%20%20%20%20%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%AE%E8%A9%B1%E3%82%92%E5%AE%9F%E6%B8%AC%E3%81%A7%E7%A2%BA%E3%81%8B%E3%82%81%E3%81%BE%E3%81%99%E3%80%82%E5%90%8C%E3%81%98%E6%A7%8B%E6%88%90%E3%83%BB%E5%90%8C%E3%81%98%E5%AD%A6%E7%BF%92%E7%8E%87%E3%81%A7%E3%80%81%E9%87%8D%E3%81%BF%E3%81%AE%E6%A8%99%E6%BA%96%E5%81%8F%E5%B7%AE%E3%81%A0%E3%81%91%E3%82%92%0A%20%20%20%20Xavier%EF%BC%88%241%2F%5Csqrt%7BD_%7B%5Ctext%7Bin%7D%7D%7D%24%EF%BC%89%E3%81%A8%E5%AE%9A%E6%95%B0%200.05%20%E3%81%AB%E5%A4%89%E3%81%88%E3%81%A6%E6%AF%94%E8%BC%83%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E5%AE%9A%E6%95%B0%200.05%20%E3%81%AF%20%24D_%7B%5Ctext%7Bin%7D%7D%3D64%24%20%E3%81%AE%E5%B1%A4%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%20Xavier%20%E3%81%AE%200.125%20%E3%81%AE%E5%8D%8A%E5%88%86%E4%BB%A5%E4%B8%8B%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E9%87%8D%E3%81%BF%E3%81%8C%E5%B0%8F%E3%81%95%E3%81%84%E3%81%A8%E3%80%81Affine%20%E3%81%AE%E9%80%86%E4%BC%9D%E6%92%AD%20%24%5Cmathrm%7Bd%7DX%20%3D%20%5Cmathrm%7Bd%7DY%5C%2CW%5E%7B%5Ctop%7D%24%20%E3%81%A7%E5%B0%8F%E3%81%95%E3%81%AA%20%24W%24%20%E3%81%8C%0A%20%20%20%20%E6%8E%9B%E3%81%8B%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E5%85%A5%E5%8F%A3%E3%81%B8%E5%90%91%E3%81%8B%E3%81%86%E3%81%BB%E3%81%A9%E5%8B%BE%E9%85%8D%E3%81%8C%E7%B8%AE%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%E9%A0%86%E4%BC%9D%E6%92%AD%E3%81%A7%E3%82%82%20Affine%20%E3%81%AE%E5%87%BA%E5%8A%9B%E3%81%8C0%E4%BB%98%E8%BF%91%E3%81%AB%E9%9B%86%E4%B8%AD%E3%81%97%E3%80%81%0A%20%20%20%20%E3%82%B7%E3%82%B0%E3%83%A2%E3%82%A4%E3%83%89%E3%81%AE%E5%87%BA%E5%8A%9B%E3%81%8C0.5%E4%BB%98%E8%BF%91%E3%81%AB%E5%9B%BA%E3%81%BE%E3%81%A3%E3%81%A6%E3%80%81%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%94%E3%81%A8%E3%81%AE%E5%B7%AE%E3%81%8C%E5%87%BA%E3%81%AB%E3%81%8F%E3%81%8F%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%81%93%E3%81%AE%E6%9D%A1%E4%BB%B6%E3%81%A7%E5%AE%9F%E9%9A%9B%E3%81%AB%E5%8A%B9%E3%81%84%E3%81%9F%E3%81%AE%E3%81%AF**%E5%8F%8E%E6%9D%9F%E3%81%AE%E9%80%9F%E3%81%95**%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%E5%8F%8D%E5%BE%A9%E3%82%92%E5%8D%81%E5%88%86%E3%81%AB%E5%8F%96%E3%82%8C%E3%81%B0%E3%81%A9%E3%81%A1%E3%82%89%E3%82%82%E5%90%8C%E7%A8%8B%E5%BA%A6%E3%81%BE%E3%81%A7%0A%20%20%20%20%E5%AD%A6%E7%BF%92%E3%81%97%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E5%88%9D%E6%9C%9F%E3%81%AE%E4%BC%B8%E3%81%B3%E3%81%8C%E5%A4%A7%E3%81%8D%E3%81%8F%E9%81%95%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF50%E5%8F%8D%E5%BE%A9%E3%81%94%E3%81%A8%E3%81%AB%E6%A4%9C%E8%A8%BC%E6%AD%A3%E8%A7%A3%E7%8E%87%E3%82%92%E6%B8%AC%E3%82%8A%E3%80%81%0A%20%20%20%20%E6%AD%A3%E8%A7%A3%E7%8E%870.9%E3%81%AB%E6%9C%80%E5%88%9D%E3%81%AB%E5%88%B0%E9%81%94%E3%81%97%E3%81%9F%E5%8F%8D%E5%BE%A9%E3%81%A8%E3%80%81%E5%AD%A6%E7%BF%92%E9%80%94%E4%B8%AD%E3%81%AE%E7%9B%AE%E5%AE%89%E3%81%A8%E3%81%97%E3%81%A6600%E5%8F%8D%E5%BE%A9%E6%99%82%E7%82%B9%E3%81%AE%E6%AD%A3%E8%A7%A3%E7%8E%87%E3%82%92%E6%AF%94%E3%81%B9%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%81%93%E3%81%93%E3%81%A7%E3%82%82%E3%83%86%E3%82%B9%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AF%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(SoftmaxWithLoss%2C%20x_train%2C%20x_validation%2C%20y_train%2C%20y_validation)%3A%0A%20%20%20%20def%20train_with_scale(scale_mode%2C%20iterations%3D3000%2C%20learning_rate%3D0.5%2C%20seed%3D71)%3A%0A%20%20%20%20%20%20%20%20local_rng%20%3D%20np.random.default_rng(seed)%0A%0A%20%20%20%20%20%20%20%20def%20make_weight(fan_in%2C%20fan_out)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20scale%20%3D%20np.sqrt(1.0%20%2F%20fan_in)%20if%20scale_mode%20%3D%3D%20%22xavier%22%20else%200.05%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20scale%20*%20local_rng.standard_normal((fan_in%2C%20fan_out))%0A%0A%20%20%20%20%20%20%20%20params%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22W1%22%3A%20make_weight(x_train.shape%5B1%5D%2C%2064)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22b1%22%3A%20np.zeros(64)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22W2%22%3A%20make_weight(64%2C%2032)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22b2%22%3A%20np.zeros(32)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22W3%22%3A%20make_weight(32%2C%2010)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22b3%22%3A%20np.zeros(10)%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20layers%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20Affine(params%5B%22W1%22%5D%2C%20params%5B%22b1%22%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20Sigmoid()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20Affine(params%5B%22W2%22%5D%2C%20params%5B%22b2%22%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20Sigmoid()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20Affine(params%5B%22W3%22%5D%2C%20params%5B%22b3%22%5D)%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20last_layer%20%3D%20SoftmaxWithLoss()%0A%20%20%20%20%20%20%20%20names%20%3D%20%5B%22W1%22%2C%20%22b1%22%2C%20%22W2%22%2C%20%22b2%22%2C%20%22W3%22%2C%20%22b3%22%5D%0A%20%20%20%20%20%20%20%20curve%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20for%20step%20in%20range(1%2C%20iterations%20%2B%201)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20indices%20%3D%20local_rng.choice(len(x_train)%2C%20size%3D64%2C%20replace%3DFalse)%0A%20%20%20%20%20%20%20%20%20%20%20%20activation%20%3D%20x_train%5Bindices%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20layer%20in%20layers%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20activation%20%3D%20layer.forward(activation)%0A%20%20%20%20%20%20%20%20%20%20%20%20last_layer.forward(activation%2C%20y_train%5Bindices%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20grad%20%3D%20last_layer.backward()%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20layer%20in%20reversed(layers)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20grad%20%3D%20layer.backward(grad)%0A%20%20%20%20%20%20%20%20%20%20%20%20affine_layers%20%3D%20%5Blayer%20for%20layer%20in%20layers%20if%20isinstance(layer%2C%20Affine)%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20position%2C%20layer%20in%20enumerate(affine_layers)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20params%5Bnames%5B2%20*%20position%5D%5D%20-%3D%20learning_rate%20*%20layer.dw%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20params%5Bnames%5B2%20*%20position%20%2B%201%5D%5D%20-%3D%20learning_rate%20*%20layer.db%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20step%20%3D%3D%201%20or%20step%20%25%2050%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20probe%20%3D%20x_validation%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20layer%20in%20layers%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20probe%20%3D%20layer.forward(probe)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20curve.append((step%2C%20float(np.mean(np.argmax(probe%2C%20axis%3D1)%20%3D%3D%20np.argmax(y_validation%2C%20axis%3D1)))))%0A%20%20%20%20%20%20%20%20return%20curve%0A%0A%20%20%20%20scale_curves%20%3D%20%7Bmode%3A%20train_with_scale(mode)%20for%20mode%20in%20%5B%22xavier%22%2C%20%22fixed_0.05%22%5D%7D%0A%0A%20%20%20%20def%20_summarize(curve)%3A%0A%20%20%20%20%20%20%20%20reached%20%3D%20%5Bstep%20for%20step%2C%20value%20in%20curve%20if%20value%20%3E%3D%200.9%5D%0A%20%20%20%20%20%20%20%20at_600%20%3D%20next((value%20for%20step%2C%20value%20in%20curve%20if%20step%20%3D%3D%20600)%2C%20float(%22nan%22))%0A%20%20%20%20%20%20%20%20return%20reached%5B0%5D%20if%20reached%20else%20None%2C%20at_600%2C%20curve%5B-1%5D%5B1%5D%0A%0A%20%20%20%20scale_summary%20%3D%20pd.DataFrame(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22init%22%3A%20mode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iterations_to_reach_0.9%22%3A%20_summarize(curve)%5B0%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22validation_accuracy_at_600%22%3A%20round(_summarize(curve)%5B1%5D%2C%204)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22final_validation_accuracy%22%3A%20round(_summarize(curve)%5B2%5D%2C%204)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20mode%2C%20curve%20in%20scale_curves.items()%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%20%20%20%20scale_summary%0A%20%20%20%20return%20(scale_curves%2C)%0A%0A%0A%40app.cell%0Adef%20_(scale_curves)%3A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(6%2C%204))%0A%20%20%20%20for%20_name%2C%20_curve%20in%20scale_curves.items()%3A%0A%20%20%20%20%20%20%20%20_ax.plot(%5B_point%5B0%5D%20for%20_point%20in%20_curve%5D%2C%20%5B_point%5B1%5D%20for%20_point%20in%20_curve%5D%2C%20label%3D_name)%0A%20%20%20%20_ax.axhline(0.1%2C%20color%3D%22tab%3Ared%22%2C%20linestyle%3D%22--%22%2C%20label%3D%22chance%20level%22)%0A%20%20%20%20_ax.set_xlabel(%22iteration%22)%0A%20%20%20%20_ax.set_ylabel(%22validation%20accuracy%22)%0A%20%20%20%20_ax.set_ylim(0.0%2C%201.0)%0A%20%20%20%20_ax.set_title(%22Effect%20of%20weight%20initialization%20scale%22)%0A%20%20%20%20_ax.legend()%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E6%9B%B2%E7%B7%9A%E3%81%AE%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%8C%E3%82%8A%E3%81%AE%E5%B7%AE%E3%81%8C%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E5%AD%A6%E7%BF%92%E3%81%AE%E9%80%9F%E3%81%95%E3%81%AE%E5%B7%AE%E3%81%A7%E3%81%99%E3%80%82%E5%AE%9A%E6%95%B00.05%E3%81%AE%E5%81%B4%E3%81%AF%E5%BA%8F%E7%9B%A4%E3%81%BB%E3%81%A8%E3%82%93%E3%81%A9%0A%20%20%20%20%E5%BD%93%E3%81%A6%E3%81%9A%E3%81%A3%E3%81%BD%E3%81%86%E3%81%AE%E6%B0%B4%E6%BA%96%EF%BC%880.1%EF%BC%89%E3%81%AB%E7%95%99%E3%81%BE%E3%82%8A%E3%80%81%E5%BE%8C%E3%81%8B%E3%82%89%E8%BF%BD%E3%81%84%E3%81%A4%E3%81%84%E3%81%A6%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%E5%8F%8D%E5%BE%A9%E5%9B%9E%E6%95%B0%E3%81%8C%E8%B6%B3%E3%82%8A%E3%81%AA%E3%81%84%E3%81%BE%E3%81%BE%0A%20%20%20%20%E6%89%93%E3%81%A1%E5%88%87%E3%82%8B%E3%81%A8%E3%80%81%E5%AE%9F%E8%A3%85%E3%81%8C%E6%AD%A3%E3%81%97%E3%81%8F%E3%81%A6%E3%82%82%E3%80%8C%E5%AD%A6%E7%BF%92%E3%81%A7%E3%81%8D%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%80%8D%E3%81%A8%E3%81%84%E3%81%86%E8%AA%A4%E3%81%A3%E3%81%9F%E7%B5%90%E8%AB%96%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%8B%E3%81%AD%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%E5%88%9D%E6%9C%9F%E5%80%A4%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB%E3%81%AF%E3%80%81%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E8%A1%A8%E7%8F%BE%E5%8A%9B%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E6%9C%80%E9%81%A9%E5%8C%96%E3%81%AE%E5%8A%B9%E3%81%8D%E3%82%84%E3%81%99%E3%81%95%E3%82%92%E5%B7%A6%E5%8F%B3%E3%81%99%E3%82%8B%E8%A8%AD%E5%AE%9A%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E8%A9%95%E4%BE%A1%0A%0A%20%20%20%20%E3%81%93%E3%81%93%E3%81%BE%E3%81%A7%E3%81%AE%E5%88%A4%E6%96%AD%E3%81%AF%E3%81%99%E3%81%B9%E3%81%A6%E6%A4%9C%E8%A8%BC%E3%83%87%E3%83%BC%E3%82%BF%E3%81%A7%E8%A1%8C%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E6%9C%80%E5%BE%8C%E3%81%AB%E3%80%81%E4%B8%80%E5%BA%A6%E3%82%82%E5%8F%82%E7%85%A7%E3%81%97%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%0A%20%20%20%20%E3%83%86%E3%82%B9%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF225%E4%BB%B6%E3%81%A7%E6%B1%8E%E5%8C%96%E6%80%A7%E8%83%BD%E3%82%92%E6%B8%AC%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82scikit-learn%20%E3%81%AE%20%60accuracy_score%60%20%E3%82%92%E4%BD%BF%E3%81%86%E3%81%AE%E3%81%A7%E3%80%81%0A%20%20%20%20%E8%87%AA%E5%89%8D%E5%AE%9F%E8%A3%85%E3%81%AE%20%60network.accuracy%60%20%E3%81%A8%E3%81%AF%E7%8B%AC%E7%AB%8B%E3%81%97%E3%81%9F%E8%A8%88%E7%AE%97%E3%81%AB%E3%81%AA%E3%82%8A%E3%80%81%E7%AA%81%E3%81%8D%E5%90%88%E3%82%8F%E3%81%9B%E3%81%AE%E6%84%8F%E5%91%B3%E3%82%82%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(network%2C%20x_test%2C%20y_test_labels)%3A%0A%20%20%20%20from%20sklearn.metrics%20import%20accuracy_score%2C%20confusion_matrix%0A%0A%20%20%20%20test_predictions%20%3D%20np.argmax(network.predict(x_test)%2C%20axis%3D1)%0A%20%20%20%20accuracy%20%3D%20accuracy_score(y_test_labels%2C%20test_predictions)%0A%20%20%20%20confusion%20%3D%20confusion_matrix(y_test_labels%2C%20test_predictions)%0A%20%20%20%20metrics_frame%20%3D%20pd.DataFrame(%7B%22metric%22%3A%20%5B%22test_accuracy%22%5D%2C%20%22value%22%3A%20%5Bround(float(accuracy)%2C%204)%5D%7D)%0A%20%20%20%20return%20confusion%2C%20metrics_frame%0A%0A%0A%40app.cell%0Adef%20_(metrics_frame)%3A%0A%20%20%20%20metrics_frame%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%81%A7%E3%80%81%E3%81%A9%E3%81%AE%E6%95%B0%E5%AD%97%E3%82%92%E3%81%A9%E3%81%AE%E6%95%B0%E5%AD%97%E3%81%A8%E5%8F%96%E3%82%8A%E9%81%95%E3%81%88%E3%81%9F%E3%81%8B%E3%82%92%E8%A6%8B%E3%81%BE%E3%81%99%E3%80%82%E8%A1%8C%E3%81%8C%E6%AD%A3%E8%A7%A3%E3%80%81%E5%88%97%E3%81%8C%E4%BA%88%E6%B8%AC%E3%81%A7%E3%80%81%0A%20%20%20%20%E5%AF%BE%E8%A7%92%E6%88%90%E5%88%86%E3%81%8C%E6%AD%A3%E8%A7%A3%E6%95%B0%E3%81%A7%E3%81%99%E3%80%82%E5%AF%BE%E8%A7%92%E3%81%8B%E3%82%89%E5%A4%96%E3%82%8C%E3%81%9F%E4%BD%8D%E7%BD%AE%E3%81%AE%E6%95%B0%E5%AD%97%E3%81%8C%E3%80%81%E5%BD%A2%E3%81%AE%E4%BC%BC%E3%81%9F%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%81%AB%0A%20%20%20%20%E5%81%8F%E3%81%A3%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%81%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(confusion)%3A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(6%2C%205))%0A%20%20%20%20_image%20%3D%20_ax.imshow(confusion%2C%20cmap%3D%22Blues%22)%0A%20%20%20%20for%20_row%20in%20range(confusion.shape%5B0%5D)%3A%0A%20%20%20%20%20%20%20%20for%20_col%20in%20range(confusion.shape%5B1%5D)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_ax.text(_col%2C%20_row%2C%20confusion%5B_row%2C%20_col%5D%2C%20ha%3D%22center%22%2C%20va%3D%22center%22%2C%20fontsize%3D8)%0A%20%20%20%20_ax.set_xticks(range(10))%0A%20%20%20%20_ax.set_yticks(range(10))%0A%20%20%20%20_ax.set_xlabel(%22predicted%22)%0A%20%20%20%20_ax.set_ylabel(%22true%22)%0A%20%20%20%20_ax.set_title(%22Confusion%20matrix%22)%0A%20%20%20%20_fig.colorbar(_image%2C%20ax%3D_ax)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
f9334e744645d963f8bb93a7c5fe40af