From f540dc98850f6411794435fbc29014d170e714e5 Mon Sep 17 00:00:00 2001 From: Shuhui Bu Date: Sun, 14 Oct 2018 11:23:01 +0800 Subject: [PATCH] Add dnn tips, rearrange dir structures --- .../README.md | 0 .../bokeh_tutorial.ipynb | 893 +++++++++++++++++++++ .../example.png | Bin .../ipython_notebook.ipynb | 0 .../matplotlib_ani.ipynb | 0 .../matplotlib_ani.py | 0 .../matplotlib_full.ipynb | 0 .../matplotlib_simple_tutorial.ipynb | 0 .../matplotlib_simple_tutorial.py | 0 .../numpy_tutorial.ipynb | 0 .../scipy_tutorial.ipynb | 0 .../stockholm_td_adj.dat | 0 .../sympy_tutorial.ipynb | 0 .../utils_git.ipynb | 0 .../utils_git_advanced.ipynb | 0 .../utils_shell.ipynb | 0 {1_knn => 2_knn}/images/knn.png | Bin {1_knn => 2_knn}/knn_classification.ipynb | 0 {1_knn => 2_knn}/knn_classification.py | 0 {1_kmeans => 3_kmeans}/ClusteringAlgorithms.ipynb | 0 {1_kmeans => 3_kmeans}/ClusteringAlgorithms.py | 0 {1_kmeans => 3_kmeans}/README.md | 0 {1_kmeans => 3_kmeans}/download_iris.py | 0 {1_kmeans => 3_kmeans}/images/ARI_ct.png | Bin {1_kmeans => 3_kmeans}/images/ARI_define.png | Bin {1_kmeans => 3_kmeans}/images/data_0.png | Bin {1_kmeans => 3_kmeans}/images/data_1.png | Bin {1_kmeans => 3_kmeans}/images/data_2.png | Bin {1_kmeans => 3_kmeans}/iris.csv | 0 {1_kmeans => 3_kmeans}/k-means.ipynb | 0 {1_kmeans => 3_kmeans}/k-means.py | 0 {1_kmeans => 3_kmeans}/kmeans-color-vq.ipynb | 0 .../Least_squares.ipynb | 0 .../Least_squares.py | 0 .../Logistic_regression.ipynb | 0 .../Logistic_regression.py | 0 .../PCA_and_Logistic_Regression.ipynb | 0 .../PCA_and_Logistic_Regression.py | 0 .../images/eq_logloss.png | Bin .../images/eq_logloss_diff.png | Bin .../images/eq_loss.png | Bin .../images/fig1.gif | Bin .../images/fig2.gif | Bin .../images/fig3.gif | Bin .../images/gd_stepsize.png | Bin .../images/gradient_descent.png | Bin {1_nn => 5_nn}/Perceptron.ipynb | 0 {1_nn => 5_nn}/Perceptron.py | 0 {1_nn => 5_nn}/images/L_b.png | Bin {1_nn => 5_nn}/images/L_w.png | Bin {1_nn => 5_nn}/images/bp_loss.png | Bin {1_nn => 5_nn}/images/bp_weight_update.png | Bin {1_nn => 5_nn}/images/cross_entropy_loss.png | Bin {1_nn => 5_nn}/images/eqn_13_16.png | Bin {1_nn => 5_nn}/images/eqn_17_20.png | Bin {1_nn => 5_nn}/images/eqn_21_22.png | Bin {1_nn => 5_nn}/images/eqn_23_25.png | Bin {1_nn => 5_nn}/images/eqn_26.png | Bin {1_nn => 5_nn}/images/eqn_27_29.png | Bin {1_nn => 5_nn}/images/eqn_30_31.png | Bin {1_nn => 5_nn}/images/eqn_32_34.png | Bin {1_nn => 5_nn}/images/eqn_35_40.png | Bin {1_nn => 5_nn}/images/eqn_3_4.png | Bin {1_nn => 5_nn}/images/eqn_5_6.png | Bin {1_nn => 5_nn}/images/eqn_7_12.png | Bin {1_nn => 5_nn}/images/eqn_delta_hidden.png | Bin {1_nn => 5_nn}/images/eqn_delta_j.png | Bin {1_nn => 5_nn}/images/eqn_ed_net_j.png | Bin {1_nn => 5_nn}/images/eqn_hidden_units.png | Bin {1_nn => 5_nn}/images/eqn_matrix1.png | Bin {1_nn => 5_nn}/images/eqn_w41_update.png | Bin {1_nn => 5_nn}/images/eqn_w4b_update.png | Bin {1_nn => 5_nn}/images/eqn_w84_update.png | Bin {1_nn => 5_nn}/images/formular_2.png | Bin {1_nn => 5_nn}/images/formular_3.png | Bin {1_nn => 5_nn}/images/formular_4.png | Bin {1_nn => 5_nn}/images/formular_5.png | Bin {1_nn => 5_nn}/images/forumlar_delta4.png | Bin {1_nn => 5_nn}/images/forumlar_delta8.png | Bin {1_nn => 5_nn}/images/neuron.gif | Bin {1_nn => 5_nn}/images/neuron.png | Bin {1_nn => 5_nn}/images/nn1.jpeg | Bin {1_nn => 5_nn}/images/nn2.png | Bin {1_nn => 5_nn}/images/nn3.png | Bin {1_nn => 5_nn}/images/nn_parameters_demo.png | Bin {1_nn => 5_nn}/images/perceptron_2.PNG | Bin {1_nn => 5_nn}/images/perceptron_geometry_def.png | Bin {1_nn => 5_nn}/images/sigmod.jpg | Bin {1_nn => 5_nn}/images/sign.png | Bin {1_nn => 5_nn}/images/softmax.png | Bin {1_nn => 5_nn}/images/softmax_demo.png | Bin {1_nn => 5_nn}/images/softmax_neuron.png | Bin .../images/softmax_neuron_output2_eqn.png | Bin .../images/softmax_neuron_output_eqn.png | Bin {1_nn => 5_nn}/mlp_bp.ipynb | 0 {1_nn => 5_nn}/mlp_bp.py | 0 {1_nn => 5_nn}/note.txt | 0 {1_nn => 5_nn}/softmax_ce.ipynb | 0 {1_nn => 5_nn}/softmax_ce.py | 0 .../0_basic/Tensor-and-Variable.ipynb | 0 {2_pytorch => 6_pytorch}/0_basic/autograd.ipynb | 0 {2_pytorch => 6_pytorch}/0_basic/autograd.py | 0 .../0_basic/dynamic-graph.ipynb | 0 .../0_basic/imgs/autograd_Variable.png | Bin .../0_basic/imgs/autograd_Variable.svg | 0 .../0_basic/imgs/com_graph.svg | 0 .../0_basic/imgs/com_graph_backward.svg | 0 .../0_basic/imgs/tensor_data_structure.svg | 0 .../0_basic/ref_Autograd.ipynb | 0 {2_pytorch => 6_pytorch}/0_basic/ref_Tensor.ipynb | 0 {2_pytorch => 6_pytorch}/1_NN/bp.ipynb | 0 {2_pytorch => 6_pytorch}/1_NN/data.txt | 0 {2_pytorch => 6_pytorch}/1_NN/deep-nn.ipynb | 0 {2_pytorch => 6_pytorch}/1_NN/deep-nn.py | 0 {2_pytorch => 6_pytorch}/1_NN/imgs/ResNet.png | Bin {2_pytorch => 6_pytorch}/1_NN/imgs/lena.png | Bin {2_pytorch => 6_pytorch}/1_NN/imgs/lena3.png | Bin {2_pytorch => 6_pytorch}/1_NN/imgs/lena512.png | Bin .../1_NN/imgs/multi_perceptron.png | Bin {2_pytorch => 6_pytorch}/1_NN/imgs/residual.png | Bin {2_pytorch => 6_pytorch}/1_NN/imgs/resnet1.png | Bin {2_pytorch => 6_pytorch}/1_NN/imgs/trans.bkp.PNG | Bin .../1_NN/linear-regression-gradient-descend.ipynb | 0 .../1_NN/linear-regression-gradient-descend.py | 0 .../1_NN/logistic-regression.ipynb | 0 .../1_NN/logistic-regression.py | 0 .../1_NN/nn-sequential-module.ipynb | 0 {2_pytorch => 6_pytorch}/1_NN/nn_summary.ipynb | 0 .../1_NN/optimizer/adadelta.ipynb | 0 .../1_NN/optimizer/adadelta.py | 0 .../1_NN/optimizer/adagrad.ipynb | 18 +- {2_pytorch => 6_pytorch}/1_NN/optimizer/adam.ipynb | 0 {2_pytorch => 6_pytorch}/1_NN/optimizer/adam.py | 0 .../1_NN/optimizer/momentum.ipynb | 0 .../1_NN/optimizer/momentum.py | 0 .../1_NN/optimizer/rmsprop.ipynb | 0 {2_pytorch => 6_pytorch}/1_NN/optimizer/rmsprop.py | 0 {2_pytorch => 6_pytorch}/1_NN/optimizer/sgd.ipynb | 0 {2_pytorch => 6_pytorch}/1_NN/optimizer/sgd.py | 0 .../1_NN/param_initialize.ipynb | 0 {2_pytorch => 6_pytorch}/2_CNN/basic_conv.ipynb | 0 {2_pytorch => 6_pytorch}/2_CNN/basic_conv.py | 0 .../2_CNN/batch-normalization.ipynb | 0 .../2_CNN/batch-normalization.py | 0 {2_pytorch => 6_pytorch}/2_CNN/cat.png | Bin .../2_CNN/data-augumentation.ipynb | 0 .../2_CNN/data-augumentation.py | 0 {2_pytorch => 6_pytorch}/2_CNN/densenet.ipynb | 0 {2_pytorch => 6_pytorch}/2_CNN/densenet.py | 0 {2_pytorch => 6_pytorch}/2_CNN/googlenet.ipynb | 0 {2_pytorch => 6_pytorch}/2_CNN/googlenet.py | 0 {2_pytorch => 6_pytorch}/2_CNN/lr-decay.ipynb | 0 {2_pytorch => 6_pytorch}/2_CNN/lr-decay.py | 0 .../2_CNN/regularization.ipynb | 0 {2_pytorch => 6_pytorch}/2_CNN/regularization.py | 0 {2_pytorch => 6_pytorch}/2_CNN/resnet.ipynb | 0 {2_pytorch => 6_pytorch}/2_CNN/resnet.py | 0 {2_pytorch => 6_pytorch}/2_CNN/utils.py | 0 {2_pytorch => 6_pytorch}/2_CNN/vgg.ipynb | 0 {2_pytorch => 6_pytorch}/2_CNN/vgg.py | 0 {2_pytorch => 6_pytorch}/3_RNN/nlp/n-gram.ipynb | 0 {2_pytorch => 6_pytorch}/3_RNN/nlp/seq-lstm.ipynb | 0 .../3_RNN/nlp/word-embedding.ipynb | 0 {2_pytorch => 6_pytorch}/3_RNN/pytorch-rnn.ipynb | 0 {2_pytorch => 6_pytorch}/3_RNN/rnn-for-image.ipynb | 0 .../3_RNN/time-series/data.csv | 0 .../3_RNN/time-series/lstm-time-series.ipynb | 0 .../3_RNN/time-series/lstm-time-series.py | 0 {2_pytorch => 6_pytorch}/3_RNN/utils.py | 0 {2_pytorch => 6_pytorch}/4_GAN/autoencoder.ipynb | 0 {2_pytorch => 6_pytorch}/4_GAN/autoencoder.py | 0 {2_pytorch => 6_pytorch}/4_GAN/gan.ipynb | 0 {2_pytorch => 6_pytorch}/4_GAN/gan.py | 0 {2_pytorch => 6_pytorch}/4_GAN/vae.ipynb | 0 {2_pytorch => 6_pytorch}/4_GAN/vae.py | 0 6_pytorch/5_NLP/README.md | 8 + {2_pytorch => 6_pytorch}/PyTorch_quick_intro.ipynb | 0 {2_pytorch => 6_pytorch}/README.md | 0 {2_pytorch => 6_pytorch}/imgs/Ipython-auto.png | Bin {2_pytorch => 6_pytorch}/imgs/Ipython-help.png | Bin {2_pytorch => 6_pytorch}/imgs/Jupyter主页面.png | Bin .../imgs/Notebook主界面.png | Bin .../imgs/autograd_Variable.png | Bin .../imgs/autograd_Variable.svg | 0 {2_pytorch => 6_pytorch}/imgs/del/img1.png | Bin {2_pytorch => 6_pytorch}/imgs/del/img2.png | Bin {2_pytorch => 6_pytorch}/imgs/install-1.png | Bin {2_pytorch => 6_pytorch}/imgs/install-2.png | Bin {2_pytorch => 6_pytorch}/imgs/nn_lenet.png | Bin README.md | 86 +- tips/InstallPython.md | 22 +- tips/images/dnn_tips_01.jpeg | Bin 0 -> 22371 bytes tips/images/dnn_tips_02.jpeg | Bin 0 -> 15676 bytes tips/images/dnn_tips_03.jpeg | Bin 0 -> 18863 bytes tips/images/dnn_tips_04.jpeg | Bin 0 -> 19867 bytes tips/images/dnn_tips_05.jpeg | Bin 0 -> 17230 bytes tips/images/dnn_tips_06.jpeg | Bin 0 -> 24483 bytes tips/images/dnn_tips_07.jpeg | Bin 0 -> 20158 bytes ...建深度神经网络的一些实战建议.md | 103 +++ 199 files changed, 1076 insertions(+), 54 deletions(-) rename {0_numpy_matplotlib_scipy_sympy => 1_numpy_matplotlib_scipy_sympy}/README.md (100%) create mode 100644 1_numpy_matplotlib_scipy_sympy/bokeh_tutorial.ipynb rename {0_numpy_matplotlib_scipy_sympy => 1_numpy_matplotlib_scipy_sympy}/example.png (100%) rename {0_numpy_matplotlib_scipy_sympy => 1_numpy_matplotlib_scipy_sympy}/ipython_notebook.ipynb (100%) rename {0_numpy_matplotlib_scipy_sympy => 1_numpy_matplotlib_scipy_sympy}/matplotlib_ani.ipynb (100%) rename {0_numpy_matplotlib_scipy_sympy => 1_numpy_matplotlib_scipy_sympy}/matplotlib_ani.py (100%) rename {0_numpy_matplotlib_scipy_sympy => 1_numpy_matplotlib_scipy_sympy}/matplotlib_full.ipynb (100%) rename {0_numpy_matplotlib_scipy_sympy => 1_numpy_matplotlib_scipy_sympy}/matplotlib_simple_tutorial.ipynb (100%) rename {0_numpy_matplotlib_scipy_sympy => 1_numpy_matplotlib_scipy_sympy}/matplotlib_simple_tutorial.py (100%) rename {0_numpy_matplotlib_scipy_sympy => 1_numpy_matplotlib_scipy_sympy}/numpy_tutorial.ipynb (100%) rename {0_numpy_matplotlib_scipy_sympy => 1_numpy_matplotlib_scipy_sympy}/scipy_tutorial.ipynb (100%) rename {0_numpy_matplotlib_scipy_sympy => 1_numpy_matplotlib_scipy_sympy}/stockholm_td_adj.dat (100%) rename {0_numpy_matplotlib_scipy_sympy => 1_numpy_matplotlib_scipy_sympy}/sympy_tutorial.ipynb (100%) rename {0_numpy_matplotlib_scipy_sympy => 1_numpy_matplotlib_scipy_sympy}/utils_git.ipynb (100%) rename {0_numpy_matplotlib_scipy_sympy => 1_numpy_matplotlib_scipy_sympy}/utils_git_advanced.ipynb (100%) rename {0_numpy_matplotlib_scipy_sympy => 1_numpy_matplotlib_scipy_sympy}/utils_shell.ipynb (100%) rename {1_knn => 2_knn}/images/knn.png (100%) rename {1_knn => 2_knn}/knn_classification.ipynb (100%) rename {1_knn => 2_knn}/knn_classification.py (100%) rename {1_kmeans => 3_kmeans}/ClusteringAlgorithms.ipynb (100%) rename {1_kmeans => 3_kmeans}/ClusteringAlgorithms.py (100%) rename {1_kmeans => 3_kmeans}/README.md (100%) rename {1_kmeans => 3_kmeans}/download_iris.py (100%) rename {1_kmeans => 3_kmeans}/images/ARI_ct.png (100%) rename {1_kmeans => 3_kmeans}/images/ARI_define.png (100%) rename {1_kmeans => 3_kmeans}/images/data_0.png (100%) rename {1_kmeans => 3_kmeans}/images/data_1.png (100%) rename {1_kmeans => 3_kmeans}/images/data_2.png (100%) rename {1_kmeans => 3_kmeans}/iris.csv (100%) rename {1_kmeans => 3_kmeans}/k-means.ipynb (100%) rename {1_kmeans => 3_kmeans}/k-means.py (100%) rename {1_kmeans => 3_kmeans}/kmeans-color-vq.ipynb (100%) rename {1_logistic_regression => 4_logistic_regression}/Least_squares.ipynb (100%) rename {1_logistic_regression => 4_logistic_regression}/Least_squares.py (100%) rename {1_logistic_regression => 4_logistic_regression}/Logistic_regression.ipynb (100%) rename {1_logistic_regression => 4_logistic_regression}/Logistic_regression.py (100%) rename {1_logistic_regression => 4_logistic_regression}/PCA_and_Logistic_Regression.ipynb (100%) rename {1_logistic_regression => 4_logistic_regression}/PCA_and_Logistic_Regression.py (100%) rename {1_logistic_regression => 4_logistic_regression}/images/eq_logloss.png (100%) rename {1_logistic_regression => 4_logistic_regression}/images/eq_logloss_diff.png (100%) rename {1_logistic_regression => 4_logistic_regression}/images/eq_loss.png (100%) rename {1_logistic_regression => 4_logistic_regression}/images/fig1.gif (100%) rename {1_logistic_regression => 4_logistic_regression}/images/fig2.gif (100%) rename {1_logistic_regression => 4_logistic_regression}/images/fig3.gif (100%) rename {1_logistic_regression => 4_logistic_regression}/images/gd_stepsize.png (100%) rename {1_logistic_regression => 4_logistic_regression}/images/gradient_descent.png (100%) rename {1_nn => 5_nn}/Perceptron.ipynb (100%) rename {1_nn => 5_nn}/Perceptron.py (100%) rename {1_nn => 5_nn}/images/L_b.png (100%) rename {1_nn => 5_nn}/images/L_w.png (100%) rename {1_nn => 5_nn}/images/bp_loss.png (100%) rename {1_nn => 5_nn}/images/bp_weight_update.png (100%) rename {1_nn => 5_nn}/images/cross_entropy_loss.png (100%) rename {1_nn => 5_nn}/images/eqn_13_16.png (100%) rename {1_nn => 5_nn}/images/eqn_17_20.png (100%) rename {1_nn => 5_nn}/images/eqn_21_22.png (100%) rename {1_nn => 5_nn}/images/eqn_23_25.png (100%) rename {1_nn => 5_nn}/images/eqn_26.png (100%) rename {1_nn => 5_nn}/images/eqn_27_29.png (100%) rename {1_nn => 5_nn}/images/eqn_30_31.png (100%) rename {1_nn => 5_nn}/images/eqn_32_34.png (100%) rename {1_nn => 5_nn}/images/eqn_35_40.png (100%) rename {1_nn => 5_nn}/images/eqn_3_4.png (100%) rename {1_nn => 5_nn}/images/eqn_5_6.png (100%) rename {1_nn => 5_nn}/images/eqn_7_12.png (100%) rename {1_nn => 5_nn}/images/eqn_delta_hidden.png (100%) rename {1_nn => 5_nn}/images/eqn_delta_j.png (100%) rename {1_nn => 5_nn}/images/eqn_ed_net_j.png (100%) rename {1_nn => 5_nn}/images/eqn_hidden_units.png (100%) rename {1_nn => 5_nn}/images/eqn_matrix1.png (100%) rename {1_nn => 5_nn}/images/eqn_w41_update.png (100%) rename {1_nn => 5_nn}/images/eqn_w4b_update.png (100%) rename {1_nn => 5_nn}/images/eqn_w84_update.png (100%) rename {1_nn => 5_nn}/images/formular_2.png (100%) rename {1_nn => 5_nn}/images/formular_3.png (100%) rename {1_nn => 5_nn}/images/formular_4.png (100%) rename {1_nn => 5_nn}/images/formular_5.png (100%) rename {1_nn => 5_nn}/images/forumlar_delta4.png (100%) rename {1_nn => 5_nn}/images/forumlar_delta8.png (100%) rename {1_nn => 5_nn}/images/neuron.gif (100%) rename {1_nn => 5_nn}/images/neuron.png (100%) rename {1_nn => 5_nn}/images/nn1.jpeg (100%) rename {1_nn => 5_nn}/images/nn2.png (100%) rename {1_nn => 5_nn}/images/nn3.png (100%) rename {1_nn => 5_nn}/images/nn_parameters_demo.png (100%) rename {1_nn => 5_nn}/images/perceptron_2.PNG (100%) rename {1_nn => 5_nn}/images/perceptron_geometry_def.png (100%) rename {1_nn => 5_nn}/images/sigmod.jpg (100%) rename {1_nn => 5_nn}/images/sign.png (100%) rename {1_nn => 5_nn}/images/softmax.png (100%) rename {1_nn => 5_nn}/images/softmax_demo.png (100%) rename {1_nn => 5_nn}/images/softmax_neuron.png (100%) rename {1_nn => 5_nn}/images/softmax_neuron_output2_eqn.png (100%) rename {1_nn => 5_nn}/images/softmax_neuron_output_eqn.png (100%) rename {1_nn => 5_nn}/mlp_bp.ipynb (100%) rename {1_nn => 5_nn}/mlp_bp.py (100%) rename {1_nn => 5_nn}/note.txt (100%) rename {1_nn => 5_nn}/softmax_ce.ipynb (100%) rename {1_nn => 5_nn}/softmax_ce.py (100%) rename {2_pytorch => 6_pytorch}/0_basic/Tensor-and-Variable.ipynb (100%) rename {2_pytorch => 6_pytorch}/0_basic/autograd.ipynb (100%) rename {2_pytorch => 6_pytorch}/0_basic/autograd.py (100%) rename {2_pytorch => 6_pytorch}/0_basic/dynamic-graph.ipynb (100%) rename {2_pytorch => 6_pytorch}/0_basic/imgs/autograd_Variable.png (100%) rename {2_pytorch => 6_pytorch}/0_basic/imgs/autograd_Variable.svg (100%) rename {2_pytorch => 6_pytorch}/0_basic/imgs/com_graph.svg (100%) rename {2_pytorch => 6_pytorch}/0_basic/imgs/com_graph_backward.svg (100%) rename {2_pytorch => 6_pytorch}/0_basic/imgs/tensor_data_structure.svg (100%) rename {2_pytorch => 6_pytorch}/0_basic/ref_Autograd.ipynb (100%) rename {2_pytorch => 6_pytorch}/0_basic/ref_Tensor.ipynb (100%) rename {2_pytorch => 6_pytorch}/1_NN/bp.ipynb (100%) rename {2_pytorch => 6_pytorch}/1_NN/data.txt (100%) rename {2_pytorch => 6_pytorch}/1_NN/deep-nn.ipynb (100%) rename {2_pytorch => 6_pytorch}/1_NN/deep-nn.py (100%) rename {2_pytorch => 6_pytorch}/1_NN/imgs/ResNet.png (100%) rename {2_pytorch => 6_pytorch}/1_NN/imgs/lena.png (100%) rename {2_pytorch => 6_pytorch}/1_NN/imgs/lena3.png (100%) rename {2_pytorch => 6_pytorch}/1_NN/imgs/lena512.png (100%) rename {2_pytorch => 6_pytorch}/1_NN/imgs/multi_perceptron.png (100%) rename {2_pytorch => 6_pytorch}/1_NN/imgs/residual.png (100%) rename {2_pytorch => 6_pytorch}/1_NN/imgs/resnet1.png (100%) rename {2_pytorch => 6_pytorch}/1_NN/imgs/trans.bkp.PNG (100%) rename {2_pytorch => 6_pytorch}/1_NN/linear-regression-gradient-descend.ipynb (100%) rename {2_pytorch => 6_pytorch}/1_NN/linear-regression-gradient-descend.py (100%) rename {2_pytorch => 6_pytorch}/1_NN/logistic-regression.ipynb (100%) rename {2_pytorch => 6_pytorch}/1_NN/logistic-regression.py (100%) rename {2_pytorch => 6_pytorch}/1_NN/nn-sequential-module.ipynb (100%) rename {2_pytorch => 6_pytorch}/1_NN/nn_summary.ipynb (100%) rename {2_pytorch => 6_pytorch}/1_NN/optimizer/adadelta.ipynb (100%) rename {2_pytorch => 6_pytorch}/1_NN/optimizer/adadelta.py (100%) rename {2_pytorch => 6_pytorch}/1_NN/optimizer/adagrad.ipynb (99%) rename {2_pytorch => 6_pytorch}/1_NN/optimizer/adam.ipynb (100%) rename {2_pytorch => 6_pytorch}/1_NN/optimizer/adam.py (100%) rename {2_pytorch => 6_pytorch}/1_NN/optimizer/momentum.ipynb (100%) rename {2_pytorch => 6_pytorch}/1_NN/optimizer/momentum.py (100%) rename {2_pytorch => 6_pytorch}/1_NN/optimizer/rmsprop.ipynb (100%) rename {2_pytorch => 6_pytorch}/1_NN/optimizer/rmsprop.py (100%) rename {2_pytorch => 6_pytorch}/1_NN/optimizer/sgd.ipynb (100%) rename {2_pytorch => 6_pytorch}/1_NN/optimizer/sgd.py (100%) rename {2_pytorch => 6_pytorch}/1_NN/param_initialize.ipynb (100%) rename {2_pytorch => 6_pytorch}/2_CNN/basic_conv.ipynb (100%) rename {2_pytorch => 6_pytorch}/2_CNN/basic_conv.py (100%) rename {2_pytorch => 6_pytorch}/2_CNN/batch-normalization.ipynb (100%) rename {2_pytorch => 6_pytorch}/2_CNN/batch-normalization.py (100%) rename {2_pytorch => 6_pytorch}/2_CNN/cat.png (100%) rename {2_pytorch => 6_pytorch}/2_CNN/data-augumentation.ipynb (100%) rename {2_pytorch => 6_pytorch}/2_CNN/data-augumentation.py (100%) rename {2_pytorch => 6_pytorch}/2_CNN/densenet.ipynb (100%) rename {2_pytorch => 6_pytorch}/2_CNN/densenet.py (100%) rename {2_pytorch => 6_pytorch}/2_CNN/googlenet.ipynb (100%) rename {2_pytorch => 6_pytorch}/2_CNN/googlenet.py (100%) rename {2_pytorch => 6_pytorch}/2_CNN/lr-decay.ipynb (100%) rename {2_pytorch => 6_pytorch}/2_CNN/lr-decay.py (100%) rename {2_pytorch => 6_pytorch}/2_CNN/regularization.ipynb (100%) rename {2_pytorch => 6_pytorch}/2_CNN/regularization.py (100%) rename {2_pytorch => 6_pytorch}/2_CNN/resnet.ipynb (100%) rename {2_pytorch => 6_pytorch}/2_CNN/resnet.py (100%) rename {2_pytorch => 6_pytorch}/2_CNN/utils.py (100%) rename {2_pytorch => 6_pytorch}/2_CNN/vgg.ipynb (100%) rename {2_pytorch => 6_pytorch}/2_CNN/vgg.py (100%) rename {2_pytorch => 6_pytorch}/3_RNN/nlp/n-gram.ipynb (100%) rename {2_pytorch => 6_pytorch}/3_RNN/nlp/seq-lstm.ipynb (100%) rename {2_pytorch => 6_pytorch}/3_RNN/nlp/word-embedding.ipynb (100%) rename {2_pytorch => 6_pytorch}/3_RNN/pytorch-rnn.ipynb (100%) rename {2_pytorch => 6_pytorch}/3_RNN/rnn-for-image.ipynb (100%) rename {2_pytorch => 6_pytorch}/3_RNN/time-series/data.csv (100%) rename {2_pytorch => 6_pytorch}/3_RNN/time-series/lstm-time-series.ipynb (100%) rename {2_pytorch => 6_pytorch}/3_RNN/time-series/lstm-time-series.py (100%) rename {2_pytorch => 6_pytorch}/3_RNN/utils.py (100%) rename {2_pytorch => 6_pytorch}/4_GAN/autoencoder.ipynb (100%) rename {2_pytorch => 6_pytorch}/4_GAN/autoencoder.py (100%) rename {2_pytorch => 6_pytorch}/4_GAN/gan.ipynb (100%) rename {2_pytorch => 6_pytorch}/4_GAN/gan.py (100%) rename {2_pytorch => 6_pytorch}/4_GAN/vae.ipynb (100%) rename {2_pytorch => 6_pytorch}/4_GAN/vae.py (100%) create mode 100644 6_pytorch/5_NLP/README.md rename {2_pytorch => 6_pytorch}/PyTorch_quick_intro.ipynb (100%) rename {2_pytorch => 6_pytorch}/README.md (100%) rename {2_pytorch => 6_pytorch}/imgs/Ipython-auto.png (100%) rename {2_pytorch => 6_pytorch}/imgs/Ipython-help.png (100%) rename {2_pytorch => 6_pytorch}/imgs/Jupyter主页面.png (100%) rename {2_pytorch => 6_pytorch}/imgs/Notebook主界面.png (100%) rename {2_pytorch => 6_pytorch}/imgs/autograd_Variable.png (100%) rename {2_pytorch => 6_pytorch}/imgs/autograd_Variable.svg (100%) rename {2_pytorch => 6_pytorch}/imgs/del/img1.png (100%) rename {2_pytorch => 6_pytorch}/imgs/del/img2.png (100%) rename {2_pytorch => 6_pytorch}/imgs/install-1.png (100%) rename {2_pytorch => 6_pytorch}/imgs/install-2.png (100%) rename {2_pytorch => 6_pytorch}/imgs/nn_lenet.png (100%) create mode 100644 tips/images/dnn_tips_01.jpeg create mode 100644 tips/images/dnn_tips_02.jpeg create mode 100644 tips/images/dnn_tips_03.jpeg create mode 100644 tips/images/dnn_tips_04.jpeg create mode 100644 tips/images/dnn_tips_05.jpeg create mode 100644 tips/images/dnn_tips_06.jpeg create mode 100644 tips/images/dnn_tips_07.jpeg create mode 100644 tips/构建深度神经网络的一些实战建议.md diff --git a/0_numpy_matplotlib_scipy_sympy/README.md b/1_numpy_matplotlib_scipy_sympy/README.md similarity index 100% rename from 0_numpy_matplotlib_scipy_sympy/README.md rename to 1_numpy_matplotlib_scipy_sympy/README.md diff --git a/1_numpy_matplotlib_scipy_sympy/bokeh_tutorial.ipynb b/1_numpy_matplotlib_scipy_sympy/bokeh_tutorial.ipynb new file mode 100644 index 0000000..00fd6b4 --- /dev/null +++ b/1_numpy_matplotlib_scipy_sympy/bokeh_tutorial.ipynb @@ -0,0 +1,893 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "
\n", + "\n", + "# Bokeh 5-minute Overview\n", + "\n", + "Bokeh is a Python interactive visualization library that targets modern web browsers for presentation. Its goal is to provide elegant, concise construction of novel graphics in the style of D3.js, and to extend this capability with high-performance interactivity over very large or streaming datasets. Bokeh can help anyone who would like to quickly and easily create interactive plots, dashboards, and data applications." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Simple Example\n", + "\n", + "Here is a simple first example. First we'll import the [`figure`](https://bokeh.pydata.org/en/latest/docs/reference/plotting.html#bokeh.plotting.figure.figure) function from [`bokeh.plotting`](https://bokeh.pydata.org/en/latest/docs/user_guide/plotting.html), which will let us create all sorts of interesting plots easily. We also import the `show` and `ouptut_notebook` functions from `bokeh.io` — these let us display our results inline in the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from bokeh.plotting import figure \n", + "from bokeh.io import output_notebook, show" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we'll tell Bokeh to display its plots directly into the notebook.\n", + "This will cause all of the Javascript and data to be embedded directly\n", + "into the HTML of the notebook itself.\n", + "(Bokeh can output straight to HTML files, or use a server, which we'll\n", + "look at later.)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n", + " \n", + " Loading BokehJS ...\n", + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "\n", + "(function(root) {\n", + " function now() {\n", + " return new Date();\n", + " }\n", + "\n", + " var force = true;\n", + "\n", + " if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n", + " root._bokeh_onload_callbacks = [];\n", + " root._bokeh_is_loading = undefined;\n", + " }\n", + "\n", + " var JS_MIME_TYPE = 'application/javascript';\n", + " var HTML_MIME_TYPE = 'text/html';\n", + " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", + " var CLASS_NAME = 'output_bokeh rendered_html';\n", + "\n", + " /**\n", + " * Render data to the DOM node\n", + " */\n", + " function render(props, node) {\n", + " var script = document.createElement(\"script\");\n", + " node.appendChild(script);\n", + " }\n", + "\n", + " /**\n", + " * Handle when an output is cleared or removed\n", + " */\n", + " function handleClearOutput(event, handle) {\n", + " var cell = handle.cell;\n", + "\n", + " var id = cell.output_area._bokeh_element_id;\n", + " var server_id = cell.output_area._bokeh_server_id;\n", + " // Clean up Bokeh references\n", + " if (id != null && id in Bokeh.index) {\n", + " Bokeh.index[id].model.document.clear();\n", + " delete Bokeh.index[id];\n", + " }\n", + "\n", + " if (server_id !== undefined) {\n", + " // Clean up Bokeh references\n", + " var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", + " cell.notebook.kernel.execute(cmd, {\n", + " iopub: {\n", + " output: function(msg) {\n", + " var id = msg.content.text.trim();\n", + " if (id in Bokeh.index) {\n", + " Bokeh.index[id].model.document.clear();\n", + " delete Bokeh.index[id];\n", + " }\n", + " }\n", + " }\n", + " });\n", + " // Destroy server and session\n", + " var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", + " cell.notebook.kernel.execute(cmd);\n", + " }\n", + " }\n", + "\n", + " /**\n", + " * Handle when a new output is added\n", + " */\n", + " function handleAddOutput(event, handle) {\n", + " var output_area = handle.output_area;\n", + " var output = handle.output;\n", + "\n", + " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", + " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", + " return\n", + " }\n", + "\n", + " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", + "\n", + " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", + " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n", + " // store reference to embed id on output_area\n", + " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", + " }\n", + " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", + " var bk_div = document.createElement(\"div\");\n", + " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", + " var script_attrs = bk_div.children[0].attributes;\n", + " for (var i = 0; i < script_attrs.length; i++) {\n", + " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", + " }\n", + " // store reference to server id on output_area\n", + " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", + " }\n", + " }\n", + "\n", + " function register_renderer(events, OutputArea) {\n", + "\n", + " function append_mime(data, metadata, element) {\n", + " // create a DOM node to render to\n", + " var toinsert = this.create_output_subarea(\n", + " metadata,\n", + " CLASS_NAME,\n", + " EXEC_MIME_TYPE\n", + " );\n", + " this.keyboard_manager.register_events(toinsert);\n", + " // Render to node\n", + " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", + " render(props, toinsert[toinsert.length - 1]);\n", + " element.append(toinsert);\n", + " return toinsert\n", + " }\n", + "\n", + " /* Handle when an output is cleared or removed */\n", + " events.on('clear_output.CodeCell', handleClearOutput);\n", + " events.on('delete.Cell', handleClearOutput);\n", + "\n", + " /* Handle when a new output is added */\n", + " events.on('output_added.OutputArea', handleAddOutput);\n", + "\n", + " /**\n", + " * Register the mime type and append_mime function with output_area\n", + " */\n", + " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", + " /* Is output safe? */\n", + " safe: true,\n", + " /* Index of renderer in `output_area.display_order` */\n", + " index: 0\n", + " });\n", + " }\n", + "\n", + " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", + " if (root.Jupyter !== undefined) {\n", + " var events = require('base/js/events');\n", + " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", + "\n", + " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", + " register_renderer(events, OutputArea);\n", + " }\n", + " }\n", + "\n", + " \n", + " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n", + " root._bokeh_timeout = Date.now() + 5000;\n", + " root._bokeh_failed_load = false;\n", + " }\n", + "\n", + " var NB_LOAD_WARNING = {'data': {'text/html':\n", + " \"
\\n\"+\n", + " \"

\\n\"+\n", + " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n", + " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n", + " \"

\\n\"+\n", + " \"\\n\"+\n", + " \"\\n\"+\n", + " \"from bokeh.resources import INLINE\\n\"+\n", + " \"output_notebook(resources=INLINE)\\n\"+\n", + " \"\\n\"+\n", + " \"
\"}};\n", + "\n", + " function display_loaded() {\n", + " var el = document.getElementById(\"8cd0437f-c78b-4d3f-afb8-1b008f84052d\");\n", + " if (el != null) {\n", + " el.textContent = \"BokehJS is loading...\";\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " if (el != null) {\n", + " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n", + " }\n", + " } else if (Date.now() < root._bokeh_timeout) {\n", + " setTimeout(display_loaded, 100)\n", + " }\n", + " }\n", + "\n", + "\n", + " function run_callbacks() {\n", + " try {\n", + " root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n", + " }\n", + " finally {\n", + " delete root._bokeh_onload_callbacks\n", + " }\n", + " console.info(\"Bokeh: all callbacks have finished\");\n", + " }\n", + "\n", + " function load_libs(js_urls, callback) {\n", + " root._bokeh_onload_callbacks.push(callback);\n", + " if (root._bokeh_is_loading > 0) {\n", + " console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", + " return null;\n", + " }\n", + " if (js_urls == null || js_urls.length === 0) {\n", + " run_callbacks();\n", + " return null;\n", + " }\n", + " console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", + " root._bokeh_is_loading = js_urls.length;\n", + " for (var i = 0; i < js_urls.length; i++) {\n", + " var url = js_urls[i];\n", + " var s = document.createElement('script');\n", + " s.src = url;\n", + " s.async = false;\n", + " s.onreadystatechange = s.onload = function() {\n", + " root._bokeh_is_loading--;\n", + " if (root._bokeh_is_loading === 0) {\n", + " console.log(\"Bokeh: all BokehJS libraries loaded\");\n", + " run_callbacks()\n", + " }\n", + " };\n", + " s.onerror = function() {\n", + " console.warn(\"failed to load library \" + url);\n", + " };\n", + " console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", + " document.getElementsByTagName(\"head\")[0].appendChild(s);\n", + " }\n", + " };var element = document.getElementById(\"8cd0437f-c78b-4d3f-afb8-1b008f84052d\");\n", + " if (element == null) {\n", + " console.log(\"Bokeh: ERROR: autoload.js configured with elementid '8cd0437f-c78b-4d3f-afb8-1b008f84052d' but no matching script tag was found. \")\n", + " return false;\n", + " }\n", + "\n", + " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.13.0.min.js\"];\n", + "\n", + " var inline_js = [\n", + " function(Bokeh) {\n", + " Bokeh.set_log_level(\"info\");\n", + " },\n", + " \n", + " function(Bokeh) {\n", + " \n", + " },\n", + " function(Bokeh) {\n", + " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.css\");\n", + " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.css\");\n", + " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.css\");\n", + " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.css\");\n", + " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.css\");\n", + " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.css\");\n", + " }\n", + " ];\n", + "\n", + " function run_inline_js() {\n", + " \n", + " if ((root.Bokeh !== undefined) || (force === true)) {\n", + " for (var i = 0; i < inline_js.length; i++) {\n", + " inline_js[i].call(root, root.Bokeh);\n", + " }if (force === true) {\n", + " display_loaded();\n", + " }} else if (Date.now() < root._bokeh_timeout) {\n", + " setTimeout(run_inline_js, 100);\n", + " } else if (!root._bokeh_failed_load) {\n", + " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", + " root._bokeh_failed_load = true;\n", + " } else if (force !== true) {\n", + " var cell = $(document.getElementById(\"8cd0437f-c78b-4d3f-afb8-1b008f84052d\")).parents('.cell').data().cell;\n", + " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", + " }\n", + "\n", + " }\n", + "\n", + " if (root._bokeh_is_loading === 0) {\n", + " console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", + " run_inline_js();\n", + " } else {\n", + " load_libs(js_urls, function() {\n", + " console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n", + " run_inline_js();\n", + " });\n", + " }\n", + "}(window));" + ], + "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n var NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n var el = document.getElementById(\"8cd0437f-c78b-4d3f-afb8-1b008f84052d\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n }\n finally {\n delete root._bokeh_onload_callbacks\n }\n console.info(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(js_urls, callback) {\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = js_urls.length;\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var s = document.createElement('script');\n s.src = url;\n s.async = false;\n s.onreadystatechange = s.onload = function() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: all BokehJS libraries loaded\");\n run_callbacks()\n }\n };\n s.onerror = function() {\n console.warn(\"failed to load library \" + url);\n };\n console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.getElementsByTagName(\"head\")[0].appendChild(s);\n }\n };var element = document.getElementById(\"8cd0437f-c78b-4d3f-afb8-1b008f84052d\");\n if (element == null) {\n console.log(\"Bokeh: ERROR: autoload.js configured with elementid '8cd0437f-c78b-4d3f-afb8-1b008f84052d' but no matching script tag was found. \")\n return false;\n }\n\n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.13.0.min.js\"];\n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n \n function(Bokeh) {\n \n },\n function(Bokeh) {\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.css\");\n }\n ];\n\n function run_inline_js() {\n \n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n var cell = $(document.getElementById(\"8cd0437f-c78b-4d3f-afb8-1b008f84052d\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(js_urls, function() {\n console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "output_notebook()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we'll import NumPy and create some simple data." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from numpy import cos, linspace\n", + "x = linspace(-6, 6, 100)\n", + "y = cos(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we'll call Bokeh's `figure` functtion to create a plot `p`. Then we call the `circle()` method of the plot to render a red circle at each of the points in x and y.\n", + "\n", + "We can immediately interact with the plot:\n", + "\n", + " * click-drag will pan the plot around.\n", + " * mousewheel will zoom in and out (after enabling in the toolbar)\n", + " \n", + "The toolbar below is the default one that is available for all plots. It can be configured further via the `tools` keyword argument." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "(function(root) {\n", + " function embed_document(root) {\n", + " \n", + " var docs_json = {\"aeec4543-46cd-4f87-acc1-ea2ed28b7ada\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"19a960da-3ecb-49d2-8914-05175c249c33\",\"type\":\"SaveTool\"},{\"attributes\":{\"callback\":null},\"id\":\"998a2381-ee7b-46a7-b853-09d40d089995\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"53392765-3d99-45d9-97d1-140fc6c5753f\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"6c55e725-22bb-438e-962c-a0db2ba7d35f\",\"type\":\"PanTool\"},{\"id\":\"f4c3e2cd-6db9-4969-a779-0bda76a138fa\",\"type\":\"WheelZoomTool\"},{\"id\":\"0fd28e7e-70b7-4324-91df-daac982d3e89\",\"type\":\"BoxZoomTool\"},{\"id\":\"19a960da-3ecb-49d2-8914-05175c249c33\",\"type\":\"SaveTool\"},{\"id\":\"6f3ae219-e17f-4090-bc5f-58f57871982b\",\"type\":\"ResetTool\"},{\"id\":\"ac9ec22e-099e-4580-a1f4-acf92de985e2\",\"type\":\"HelpTool\"}]},\"id\":\"53571765-f31b-4722-ac3d-640d3112b764\",\"type\":\"Toolbar\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"b11d1b46-0b08-44c8-bb16-8304513e3d15\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"abcd0a1b-9994-4fed-9ea3-4de28a6854db\",\"type\":\"BasicTicker\"}},\"id\":\"b2505cf9-c6de-47f2-977e-2c2517af633c\",\"type\":\"Grid\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"c8374353-3064-42eb-b0f9-1f316dcf5dd9\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"6f3ae219-e17f-4090-bc5f-58f57871982b\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"c5a3f469-ba65-4d45-958a-37fdb58305cc\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null},\"id\":\"79fb852e-118b-4e78-a208-3f774ed8dcc6\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"6c55e725-22bb-438e-962c-a0db2ba7d35f\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"cc7498d8-81ed-4e36-a3bc-2d259b9571a4\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"874619d4-301d-4963-96a5-84de42cdf4da\",\"type\":\"LinearScale\"},{\"attributes\":{\"plot\":{\"id\":\"b11d1b46-0b08-44c8-bb16-8304513e3d15\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"57c20150-54f5-4d18-8aa3-c2eae2efad00\",\"type\":\"BasicTicker\"}},\"id\":\"b526a813-5c7d-4fbf-a459-1ed59fcd7c69\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"f4c3e2cd-6db9-4969-a779-0bda76a138fa\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"formatter\":{\"id\":\"53392765-3d99-45d9-97d1-140fc6c5753f\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"b11d1b46-0b08-44c8-bb16-8304513e3d15\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"57c20150-54f5-4d18-8aa3-c2eae2efad00\",\"type\":\"BasicTicker\"}},\"id\":\"6d2d1f76-0b1f-4c09-8091-c8f58da65e88\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"ac9ec22e-099e-4580-a1f4-acf92de985e2\",\"type\":\"HelpTool\"},{\"attributes\":{\"below\":[{\"id\":\"6d2d1f76-0b1f-4c09-8091-c8f58da65e88\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"78750af8-5fe4-4cd7-b68b-4b31ae1ceb65\",\"type\":\"LinearAxis\"}],\"plot_height\":500,\"plot_width\":500,\"renderers\":[{\"id\":\"6d2d1f76-0b1f-4c09-8091-c8f58da65e88\",\"type\":\"LinearAxis\"},{\"id\":\"b526a813-5c7d-4fbf-a459-1ed59fcd7c69\",\"type\":\"Grid\"},{\"id\":\"78750af8-5fe4-4cd7-b68b-4b31ae1ceb65\",\"type\":\"LinearAxis\"},{\"id\":\"b2505cf9-c6de-47f2-977e-2c2517af633c\",\"type\":\"Grid\"},{\"id\":\"1d120b68-24b8-4860-9bfc-f1afaa2022bd\",\"type\":\"BoxAnnotation\"},{\"id\":\"3a34f9aa-3e96-4184-9572-c1d9738fd25b\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"c8374353-3064-42eb-b0f9-1f316dcf5dd9\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"53571765-f31b-4722-ac3d-640d3112b764\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"998a2381-ee7b-46a7-b853-09d40d089995\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"8fe96ad8-d60d-4a19-ac19-122ea130038d\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"79fb852e-118b-4e78-a208-3f774ed8dcc6\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"874619d4-301d-4963-96a5-84de42cdf4da\",\"type\":\"LinearScale\"}},\"id\":\"b11d1b46-0b08-44c8-bb16-8304513e3d15\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"firebrick\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"firebrick\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8cc9453d-fde9-4ab3-8464-0806c9be544d\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"abcd0a1b-9994-4fed-9ea3-4de28a6854db\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"911af4b9-51ba-45de-89ad-8cf208411bb5\",\"type\":\"ColumnDataSource\"}},\"id\":\"7f0c4e1d-90fb-4029-b77a-b4600ebea1de\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"1d120b68-24b8-4860-9bfc-f1afaa2022bd\",\"type\":\"BoxAnnotation\"}},\"id\":\"0fd28e7e-70b7-4324-91df-daac982d3e89\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAGMCEDz744IMXwAgffPDBBxfAjC666KKLFsAQPvjggw8WwJNNNtlkkxXAF1100UUXFcCbbLLJJpsUwB988MEHHxTAo4suuuiiE8Anm2yyySYTwKqqqqqqqhLALrrooosuEsCyySabbLIRwDbZZJNNNhHAuuiiiy66EMA++OCDDz4QwIQPPvjggw/AjC666KKLDsCTTTbZZJMNwJtssskmmwzAo4suuuiiC8CqqqqqqqoKwLLJJptssgnAuuiiiy66CMDCBx988MEHwMomm2yyyQbA0UUXXXTRBcDZZJNNNtkEwOGDDz744APA6KKLLrroAsDwwQcffPABwPjggw8++ADAAAAAAAAAAMAQPvjggw/+vyB88MEHH/y/MLrooosu+r88+OCDDz74v0w22WSTTfa/XHTRRRdd9L9ssskmm2zyv3zwwQcffPC/GF100UUX7b842WSTTTbpv1BVVVVVVeW/cNFFF1104b8gm2yyySbbv2CTTTbZZNO/QBdddNFFx78AH3zwwQevvwAffPDBB68/QBdddNFFxz9gk0022WTTPzCbbLLJJts/eNFFF1104T9YVVVVVVXlPzjZZJNNNuk/GF100UUX7T988MEHH3zwP2yyySabbPI/YHTRRRdd9D9QNtlkk032P0D44IMPPvg/MLrooosu+j8gfPDBBx/8PxA++OCDD/4/AAAAAAAAAED44IMPPvgAQPDBBx988AFA6KKLLrroAkDggw8++OADQNhkk0022QRA0EUXXXTRBUDMJptssskGQMQHH3zwwQdAvOiiiy66CEC0ySabbLIJQKyqqqqqqgpApIsuuuiiC0CcbLLJJpsMQJRNNtlkkw1AjC666KKLDkCEDz744IMPQD744IMPPhBAuuiiiy66EEA22WSTTTYRQLLJJptsshFALrrooosuEkCsqqqqqqoSQCibbLLJJhNApIsuuuiiE0AgfPDBBx8UQJxssskmmxRAGF100UUXFUCUTTbZZJMVQBA++OCDDxZAjC666KKLFkAIH3zwwQcXQIQPPvjggxdAAAAAAAAAGEA=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"9SJ4Cbe57j8JY+r+OmvtP60Tvck6rus/WLzTHz6J6T/x0bJaUwTnP6I1+zPxKOQ/oScYONMB4T8ZPFzpojXbP8HygfRnAdQ/fGjcYAsEyT8z6888mk6zP+5YV8fTZqe/pYFip7xExb9PFf407y/Svy7Wz2Mtedm/GSzA6Fwx4L8zrWZ2Tmnjv1uZMxdUWOa/yEpIeGjz6L+BKUaewTDrv4rmZKv1B+2/pq/Cehpy7r9tKDKa32nvv7My8UCi6++/lWFJ+Hr1779ggMrCRIfvv13mP6edou6//JJWneBK7b/O+cbyGIXrv36TXFjvV+m/wpQK3pDL5r8HDQc8kOnjv6yITtzBvOC/BXJTVyai2r/ACBWWu2bTv4h0TibdxMe/sSQZ5fDFsL8tuK+mtnmsP79vCY4VhcY//tyFCJLL0j9AaSfs/Q3aPzoevIFEd+A/HBvGyK6p4z+ZiDpMO5LmPxkpbAr9Jek/+alUikVb6z85RlM6ySntP8nZq5m+iu4/fMS1t/d47z+hS/Ko9fDvP6FL8qj18O8/fMS1t/d47z/J2auZvoruPzZGUzrJKe0/9KlUikVb6z8UKWwK/SXpP5mIOkw7kuY/HBvGyK6p4z86HryBRHfgP0BpJ+z9Ddo/79yFCJLL0j+fbwmOFYXGP623r6a2eaw/sSQZ5fDFsL+IdE4m3cTHv8AIFZa7ZtO/BXJTVyai2r+siE7cwbzgvwcNBzyQ6eO/wpQK3pDL5r98k1xY71fpv8z5xvIYheu/+pJWneBK7b9f5j+nnaLuv2KAysJEh++/lWFJ+Hr177+zMvFAouvvv2soMprfae+/pK/Cehpy7r+I5mSr9Qftv38pRp7BMOu/yEpIeGjz6L9bmTMXVFjmvzOtZnZOaeO/GSzA6Fwx4L8u1s9jLXnZv08V/jTvL9K/pYFip7xExb/uV1fH02anv3PrzzyaTrM/nGjcYAsEyT/Q8oH0ZwHUPyc8XOmiNds/qCcYONMB4T+oNfsz8SjkP/HRslpTBOc/WLzTHz6J6T+tE73JOq7rPwlj6v46a+0/9SJ4Cbe57j8=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"7ea9693c-ead2-4bff-8434-ff171d29d97c\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"cc7498d8-81ed-4e36-a3bc-2d259b9571a4\",\"type\":\"UnionRenderers\"}},\"id\":\"911af4b9-51ba-45de-89ad-8cf208411bb5\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"57c20150-54f5-4d18-8aa3-c2eae2efad00\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":7},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2654344b-316e-44fc-80f5-1d58ed2c9508\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"8fe96ad8-d60d-4a19-ac19-122ea130038d\",\"type\":\"LinearScale\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1d120b68-24b8-4860-9bfc-f1afaa2022bd\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"7ea9693c-ead2-4bff-8434-ff171d29d97c\",\"type\":\"Selection\"},{\"attributes\":{\"formatter\":{\"id\":\"c5a3f469-ba65-4d45-958a-37fdb58305cc\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"b11d1b46-0b08-44c8-bb16-8304513e3d15\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"abcd0a1b-9994-4fed-9ea3-4de28a6854db\",\"type\":\"BasicTicker\"}},\"id\":\"78750af8-5fe4-4cd7-b68b-4b31ae1ceb65\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data_source\":{\"id\":\"911af4b9-51ba-45de-89ad-8cf208411bb5\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"8cc9453d-fde9-4ab3-8464-0806c9be544d\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"2654344b-316e-44fc-80f5-1d58ed2c9508\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"7f0c4e1d-90fb-4029-b77a-b4600ebea1de\",\"type\":\"CDSView\"}},\"id\":\"3a34f9aa-3e96-4184-9572-c1d9738fd25b\",\"type\":\"GlyphRenderer\"}],\"root_ids\":[\"b11d1b46-0b08-44c8-bb16-8304513e3d15\"]},\"title\":\"Bokeh Application\",\"version\":\"0.13.0\"}};\n", + " var render_items = [{\"docid\":\"aeec4543-46cd-4f87-acc1-ea2ed28b7ada\",\"roots\":{\"b11d1b46-0b08-44c8-bb16-8304513e3d15\":\"94f2184c-4368-4600-a460-84eec19a94b9\"}}];\n", + " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", + "\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " } else {\n", + " var attempts = 0;\n", + " var timer = setInterval(function(root) {\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " clearInterval(timer);\n", + " }\n", + " attempts++;\n", + " if (attempts > 100) {\n", + " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", + " clearInterval(timer);\n", + " }\n", + " }, 10, root)\n", + " }\n", + "})(window);" + ], + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "b11d1b46-0b08-44c8-bb16-8304513e3d15" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "p = figure(width=500, height=500)\n", + "p.circle(x, y, size=7, color=\"firebrick\", alpha=0.5)\n", + "show(p)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Bar Plot Example\n", + "\n", + "\n", + "Bokeh's core display model relies on *composing graphical primitives* which are bound to data series. This is similar in spirit to Protovis and D3, and different than most other Python plotting libraries.\n", + "\n", + "A slightly more sophisticated example demonstrates this idea.\n", + "\n", + "Bokeh ships with a small set of interesting \"sample data\" in the `bokeh.sampledata` package. We'll load up some historical automobile mileage data, which is returned as a Pandas `DataFrame`." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from bokeh.sampledata.autompg import autompg\n", + "\n", + "grouped = autompg.groupby(\"yr\")\n", + "\n", + "mpg = grouped.mpg\n", + "avg, std = mpg.mean(), mpg.std()\n", + "years = list(grouped.groups)\n", + "american = autompg[autompg[\"origin\"]==1]\n", + "japanese = autompg[autompg[\"origin\"]==3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For each year, we want to plot the distribution of MPG within that year." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "(function(root) {\n", + " function embed_document(root) {\n", + " \n", + " var docs_json = {\"bad1f4b5-c81b-4fc1-872b-70166b3d66a6\":{\"roots\":{\"references\":[{\"attributes\":{\"bottom\":{\"field\":\"bottom\"},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"field\":\"top\"},\"width\":{\"value\":0.8},\"x\":{\"field\":\"x\"}},\"id\":\"1de74a0b-8e49-49f1-aa66-f6afc5dafeed\",\"type\":\"VBar\"},{\"attributes\":{\"bottom\":{\"field\":\"bottom\"},\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":null},\"top\":{\"field\":\"top\"},\"width\":{\"value\":0.8},\"x\":{\"field\":\"x\"}},\"id\":\"cd33895a-6a48-4d01-959b-775e51030e93\",\"type\":\"VBar\"},{\"attributes\":{},\"id\":\"f49d1841-eed7-4f3b-b6b4-349e109bb6c9\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"557f2278-14a2-47d1-88c5-96fbc488748a\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"3f9a981e-eaaf-413f-b424-0a9f6ff67052\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"plot\":{\"id\":\"42a1e000-ac23-4612-97b0-2fded48d2234\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"8746336a-c725-44a0-9b9d-808e295d5fe0\",\"type\":\"BasicTicker\"}},\"id\":\"6f34509e-4b27-4a3f-9248-b86c22682096\",\"type\":\"Grid\"},{\"attributes\":{\"items\":[{\"id\":\"ef96f6cf-cee8-43f9-a0fb-889a804321bc\",\"type\":\"LegendItem\"},{\"id\":\"c3b5d73d-f1d7-483b-a110-76201f47499b\",\"type\":\"LegendItem\"},{\"id\":\"de093522-d125-418f-bbb5-99465d6efe7e\",\"type\":\"LegendItem\"}],\"location\":\"top_left\",\"plot\":{\"id\":\"42a1e000-ac23-4612-97b0-2fded48d2234\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"b8c5c1fe-3e58-4014-bd93-1a8a62e79b51\",\"type\":\"Legend\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":[70,70,71,71,71,71,72,72,72,72,72,73,73,73,73,74,74,74,74,74,74,75,75,75,75,76,76,76,76,77,77,77,77,77,77,78,78,78,78,78,78,78,78,79,79,80,80,80,80,80,80,80,80,80,80,80,80,80,81,81,81,81,81,81,81,81,81,81,81,81,82,82,82,82,82,82,82,82,82],\"y\":{\"__ndarray__\":\"AAAAAAAAOEAAAAAAAAA7QAAAAAAAADtAAAAAAAAAOUAAAAAAAAA/QAAAAAAAgEFAAAAAAAAAOEAAAAAAAAAzQAAAAAAAADxAAAAAAAAAN0AAAAAAAAA7QAAAAAAAADRAAAAAAAAANkAAAAAAAAAyQAAAAAAAADRAAAAAAAAAP0AAAAAAAABAQAAAAAAAAD9AAAAAAAAAQEAAAAAAAAA4QAAAAAAAADpAAAAAAAAAPUAAAAAAAAA4QAAAAAAAADhAAAAAAACAQEAAAAAAAIBAQAAAAAAAAEBAAAAAAAAAPEAAAAAAAAAzQAAAAAAAgD9AAAAAAADAQEAAAAAAAAA6QAAAAAAAAD5AAAAAAAAANkAAAAAAAIA1QGZmZmZmZkBAMzMzMzOzQ0DNzMzMzAxCQAAAAAAAgDtAMzMzMzMzO0CamZmZmRk1QGZmZmZm5jdAAAAAAACAPUDNzMzMzAxBQM3MzMzMzD9AzczMzMwMQ0CamZmZmZlCQM3MzMzMzD1AzczMzMxMP0AAAAAAAIBCQJqZmZmZGUBAzczMzMxMR0BmZmZmZmZEQM3MzMzMTEZAZmZmZmbmQECamZmZmVlAQDMzMzMzszdAMzMzMzMzQEDNzMzMzIxDQM3MzMzMjEFAZmZmZmYmQEAAAAAAAIBCQJqZmZmZ2UJAzczMzMwMQUCamZmZmdlAQDMzMzMzM0BAMzMzMzNzQECamZmZmZk/QGZmZmZmZjlAMzMzMzMzOEAAAAAAAIBCQAAAAAAAAD9AAAAAAAAAQkAAAAAAAABCQAAAAAAAAEFAAAAAAAAAQ0AAAAAAAABAQAAAAAAAAENAAAAAAAAAQEA=\",\"dtype\":\"float64\",\"shape\":[79]}},\"selected\":{\"id\":\"a5104717-6199-4dfb-bc90-88e74528a50b\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"def5aedb-6ec4-43b2-8d55-8785d71697a3\",\"type\":\"UnionRenderers\"}},\"id\":\"997753a2-3562-43cc-9e39-f9a6aaf35341\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"formatter\":{\"id\":\"cea30ce4-aa3c-497c-8e1b-7bb25d9ecf04\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"42a1e000-ac23-4612-97b0-2fded48d2234\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"8746336a-c725-44a0-9b9d-808e295d5fe0\",\"type\":\"BasicTicker\"}},\"id\":\"d84a39a9-6b2c-442c-b62c-e89b9f6c76fe\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"b0018d60-14d1-40f2-9dea-5170ab264a96\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"71febb92-34b9-4d8c-9385-c2e1d097b0f1\",\"type\":\"BoxAnnotation\"}},\"id\":\"1d467055-1174-4ab4-b5f5-71c546d5fba2\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"3e823cb1-245a-4f30-960b-a3b743b68c46\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"def5aedb-6ec4-43b2-8d55-8785d71697a3\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"0fd54d4d-3ef6-4a7b-bbd9-e5fadd3ac336\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2112f18f-5e3b-4d48-85de-8f3bde518be4\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data_source\":{\"id\":\"93bee0ab-0c38-4997-a136-9ab57f418dc4\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"396318f8-8c68-4c82-8aa4-4cb51beb704e\",\"type\":\"Triangle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"690d5c34-3a3b-4585-afb7-1348fbf8be40\",\"type\":\"Triangle\"},\"selection_glyph\":null,\"view\":{\"id\":\"dac11c80-2b69-4011-87aa-a3ed97d9ddc7\",\"type\":\"CDSView\"}},\"id\":\"8bb09451-0a47-4db0-ba55-731985ffc439\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data_source\":{\"id\":\"b416c1a0-4a14-4f1f-9893-faf3ea38806c\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"cd33895a-6a48-4d01-959b-775e51030e93\",\"type\":\"VBar\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1de74a0b-8e49-49f1-aa66-f6afc5dafeed\",\"type\":\"VBar\"},\"selection_glyph\":null,\"view\":{\"id\":\"85be5f7b-6e27-4891-8097-aea939802587\",\"type\":\"CDSView\"}},\"id\":\"31d1fce5-a6e2-4eb1-8760-57a4b845d35e\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"690d5c34-3a3b-4585-afb7-1348fbf8be40\",\"type\":\"Triangle\"},{\"attributes\":{\"callback\":null,\"data\":{\"bottom\":{\"__ndarray__\":\"gvFgx2qzKECcKci59t4sQJZdRzm5jipAzvVtn6zMKECki7kXNjswQIpnc6D2pi5ApAV4qVNeL0DtFQi6+rIwQBxLQL6+KTFAWBwW2YNMMkBnDzEy+Oo6QAq856zmjDhAfzfsSXnEOkA=\",\"dtype\":\"float64\",\"shape\":[13]},\"top\":{\"__ndarray__\":\"55jlF2UHN0DAzlQxaMk7QBEIyj5aJjhATTh849zMNUD6TNCFok49QMPUTjgNNTlA1KLp0Ht2O0AT6vdFBQ0+QNr+XjaL9T5AVt48aCfjP0AojYptQ1hEQPSsO6IX6UFAQOQJW8OdQkA=\",\"dtype\":\"float64\",\"shape\":[13]},\"x\":[70,71,72,73,74,75,76,77,78,79,80,81,82]},\"selected\":{\"id\":\"401a863a-51d7-4731-8006-4f63dc274b44\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"2112f18f-5e3b-4d48-85de-8f3bde518be4\",\"type\":\"UnionRenderers\"}},\"id\":\"b416c1a0-4a14-4f1f-9893-faf3ea38806c\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"42a1e000-ac23-4612-97b0-2fded48d2234\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"385effe2-ece0-4140-9bb6-2affa39a2f09\",\"type\":\"BasicTicker\"}},\"id\":\"bd948bd1-94ce-4bb4-8b2a-f5d0275f0545\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"red\"},\"size\":{\"units\":\"screen\",\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"35d1fbce-767b-40b4-bde1-3758144fd230\",\"type\":\"Circle\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":[70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,80,80,80,80,80,80,81,81,81,81,81,81,81,81,81,81,81,81,81,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82],\"y\":{\"__ndarray__\":\"AAAAAAAAMkAAAAAAAAAuQAAAAAAAADJAAAAAAAAAMEAAAAAAAAAxQAAAAAAAAC5AAAAAAAAALEAAAAAAAAAsQAAAAAAAACxAAAAAAAAALkAAAAAAAAAuQAAAAAAAACxAAAAAAAAALkAAAAAAAAAsQAAAAAAAADZAAAAAAAAAMkAAAAAAAAA1QAAAAAAAADVAAAAAAAAAJEAAAAAAAAAkQAAAAAAAACZAAAAAAAAAIkAAAAAAAAA8QAAAAAAAADNAAAAAAAAAMEAAAAAAAAAxQAAAAAAAADNAAAAAAAAAMkAAAAAAAAAsQAAAAAAAACxAAAAAAAAALEAAAAAAAAAsQAAAAAAAAChAAAAAAAAAKkAAAAAAAAAqQAAAAAAAADJAAAAAAAAANkAAAAAAAAAzQAAAAAAAADJAAAAAAAAAN0AAAAAAAAA6QAAAAAAAADlAAAAAAAAANEAAAAAAAAA1QAAAAAAAACpAAAAAAAAALEAAAAAAAAAuQAAAAAAAACxAAAAAAAAAMUAAAAAAAAAmQAAAAAAAACpAAAAAAAAAKEAAAAAAAAAqQAAAAAAAAC5AAAAAAAAAKkAAAAAAAAAqQAAAAAAAACxAAAAAAAAANkAAAAAAAAA8QAAAAAAAACpAAAAAAAAALEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAoQAAAAAAAACpAAAAAAAAAKkAAAAAAAAAsQAAAAAAAACpAAAAAAAAAKEAAAAAAAAAqQAAAAAAAADJAAAAAAAAAMEAAAAAAAAAyQAAAAAAAADJAAAAAAAAAN0AAAAAAAAAmQAAAAAAAAChAAAAAAAAAKkAAAAAAAAAoQAAAAAAAADJAAAAAAAAANUAAAAAAAAAzQAAAAAAAADVAAAAAAAAALkAAAAAAAAAwQAAAAAAAAC5AAAAAAAAAJkAAAAAAAAA0QAAAAAAAADNAAAAAAAAALkAAAAAAAAA6QAAAAAAAADlAAAAAAAAAMEAAAAAAAAAwQAAAAAAAADJAAAAAAAAAMEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALEAAAAAAAAAsQAAAAAAAADxAAAAAAAAAM0AAAAAAAAAyQAAAAAAAAC5AAAAAAAAALkAAAAAAAAAwQAAAAAAAAC5AAAAAAAAAMEAAAAAAAAAsQAAAAAAAADFAAAAAAAAAMEAAAAAAAAAuQAAAAAAAADJAAAAAAAAANUAAAAAAAAA0QAAAAAAAACpAAAAAAAAAN0AAAAAAAAA0QAAAAAAAADdAAAAAAAAAMkAAAAAAAAAzQAAAAAAAADlAAAAAAAAAOkAAAAAAAIAxQAAAAAAAADBAAAAAAAAAL0AAAAAAAAAtQAAAAAAAADZAAAAAAAAANkAAAAAAAAA4QAAAAAAAgDZAAAAAAAAAPUAAAAAAAIA4QAAAAAAAADRAAAAAAAAAMkAAAAAAAIAyQAAAAAAAgDFAAAAAAACAOkAAAAAAAAAqQAAAAAAAgDBAAAAAAAAAKkAAAAAAAAAqQAAAAAAAACpAAAAAAAAAPkAAAAAAAIA5QAAAAAAAgDFAAAAAAAAAMUAAAAAAAAAvQAAAAAAAAC5AAAAAAACAMUAAAAAAAIA0QAAAAAAAADNAAAAAAACAMkAAAAAAAAAwQAAAAAAAAC9AAAAAAAAAL0AAAAAAAAAwQAAAAAAAgDhAAAAAAACAOUAAAAAAAIA+QAAAAAAAwEBAzczMzMwMQkBmZmZmZuYzQGZmZmZmZjNAMzMzMzMzNEAzMzMzMzMzQAAAAAAAgDRAMzMzMzMzNECamZmZmRk5QAAAAAAAgDRAZmZmZmZmM0CamZmZmZk0QM3MzMzMzDRAmpmZmZmZMkCamZmZmRkyQDMzMzMzMzNAMzMzMzOzMUCamZmZmRkyQAAAAAAAgDFAAAAAAAAAPkBmZmZmZuY+QDMzMzMzMzdAzczMzMzMN0AAAAAAAIA1QM3MzMzMzDNAzczMzMxMNkAzMzMzMzM0QJqZmZmZmTRAAAAAAAAAMUCamZmZmZkxQAAAAAAAgDBAMzMzMzMzMkBmZmZmZuYwQAAAAAAAAC9AMzMzMzMzM0AAAAAAAIAyQJqZmZmZ2UFAZmZmZmZmO0AAAAAAAAA3QGZmZmZm5jdAmpmZmZkZQUAAAAAAAEBBQGZmZmZmZjxAzczMzMzMPEDNzMzMzMw6QAAAAAAAwEBAzczMzMwMQEAAAAAAAAA8QGZmZmZmZjpAzczMzMxMOECamZmZmRkzQGZmZmZm5jtAMzMzMzMzO0CamZmZmZk6QM3MzMzMzDlAAAAAAACAN0AAAAAAAAA+QAAAAAAAgENAmpmZmZlZQUAzMzMzMzNBQGZmZmZm5j1AZmZmZmZmNkCamZmZmZk6QDMzMzMzMzRAmpmZmZmZMUAAAAAAAAA8QAAAAAAAADtAAAAAAAAAQUAAAAAAAAA/QAAAAAAAAD1AAAAAAAAAO0AAAAAAAAA4QAAAAAAAAENAAAAAAAAAQkAAAAAAAAA5QAAAAAAAAENAAAAAAAAAOkAAAAAAAAA2QAAAAAAAAEJAAAAAAAAAO0AAAAAAAAA7QAAAAAAAAEBAAAAAAAAAPEAAAAAAAAA/QA==\",\"dtype\":\"float64\",\"shape\":[245]}},\"selected\":{\"id\":\"0fd54d4d-3ef6-4a7b-bbd9-e5fadd3ac336\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"3f9a981e-eaaf-413f-b424-0a9f6ff67052\",\"type\":\"UnionRenderers\"}},\"id\":\"93bee0ab-0c38-4997-a136-9ab57f418dc4\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"a56687e4-8676-4c80-9542-a2b7e28d2f10\",\"type\":\"LinearScale\"},{\"attributes\":{\"formatter\":{\"id\":\"f49d1841-eed7-4f3b-b6b4-349e109bb6c9\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"42a1e000-ac23-4612-97b0-2fded48d2234\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"385effe2-ece0-4140-9bb6-2affa39a2f09\",\"type\":\"BasicTicker\"}},\"id\":\"c92afa04-98bd-406a-85fe-17af36d4a2d5\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"f746c554-6103-46d0-bcf0-ae1c95da3bd1\",\"type\":\"SaveTool\"},{\"attributes\":{\"source\":{\"id\":\"997753a2-3562-43cc-9e39-f9a6aaf35341\",\"type\":\"ColumnDataSource\"}},\"id\":\"89a54986-4256-4767-9631-1ee70d64908d\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5bad126c-2e3a-4af3-8b79-079e6b26272f\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"997753a2-3562-43cc-9e39-f9a6aaf35341\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"35d1fbce-767b-40b4-bde1-3758144fd230\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5bad126c-2e3a-4af3-8b79-079e6b26272f\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"89a54986-4256-4767-9631-1ee70d64908d\",\"type\":\"CDSView\"}},\"id\":\"d0ce224a-b212-42c4-b185-7149c62326b5\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"93bee0ab-0c38-4997-a136-9ab57f418dc4\",\"type\":\"ColumnDataSource\"}},\"id\":\"dac11c80-2b69-4011-87aa-a3ed97d9ddc7\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"401a863a-51d7-4731-8006-4f63dc274b44\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"cea30ce4-aa3c-497c-8e1b-7bb25d9ecf04\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"label\":{\"value\":\"MPG 1 stddev\"},\"renderers\":[{\"id\":\"31d1fce5-a6e2-4eb1-8760-57a4b845d35e\",\"type\":\"GlyphRenderer\"}]},\"id\":\"ef96f6cf-cee8-43f9-a0fb-889a804321bc\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"a5104717-6199-4dfb-bc90-88e74528a50b\",\"type\":\"Selection\"},{\"attributes\":{\"plot\":null,\"text\":\"MPG by Year (Japan and US)\"},\"id\":\"12b675db-3ffc-4717-a6e7-7ede284243d2\",\"type\":\"Title\"},{\"attributes\":{\"label\":{\"value\":\"American\"},\"renderers\":[{\"id\":\"8bb09451-0a47-4db0-ba55-731985ffc439\",\"type\":\"GlyphRenderer\"}]},\"id\":\"de093522-d125-418f-bbb5-99465d6efe7e\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"385effe2-ece0-4140-9bb6-2affa39a2f09\",\"type\":\"BasicTicker\"},{\"attributes\":{\"below\":[{\"id\":\"d84a39a9-6b2c-442c-b62c-e89b9f6c76fe\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"c92afa04-98bd-406a-85fe-17af36d4a2d5\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"d84a39a9-6b2c-442c-b62c-e89b9f6c76fe\",\"type\":\"LinearAxis\"},{\"id\":\"6f34509e-4b27-4a3f-9248-b86c22682096\",\"type\":\"Grid\"},{\"id\":\"c92afa04-98bd-406a-85fe-17af36d4a2d5\",\"type\":\"LinearAxis\"},{\"id\":\"bd948bd1-94ce-4bb4-8b2a-f5d0275f0545\",\"type\":\"Grid\"},{\"id\":\"71febb92-34b9-4d8c-9385-c2e1d097b0f1\",\"type\":\"BoxAnnotation\"},{\"id\":\"b8c5c1fe-3e58-4014-bd93-1a8a62e79b51\",\"type\":\"Legend\"},{\"id\":\"31d1fce5-a6e2-4eb1-8760-57a4b845d35e\",\"type\":\"GlyphRenderer\"},{\"id\":\"d0ce224a-b212-42c4-b185-7149c62326b5\",\"type\":\"GlyphRenderer\"},{\"id\":\"8bb09451-0a47-4db0-ba55-731985ffc439\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"12b675db-3ffc-4717-a6e7-7ede284243d2\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"dac28597-e94b-4e2c-b66b-577683171a87\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"60ff39d0-7b63-42b2-b966-7efe4880b1f1\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"a56687e4-8676-4c80-9542-a2b7e28d2f10\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"0eb3873c-b17e-4aec-8267-76dda47638fc\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"25cac6a0-7c17-4fbe-bf97-07056d72f12f\",\"type\":\"LinearScale\"}},\"id\":\"42a1e000-ac23-4612-97b0-2fded48d2234\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"b416c1a0-4a14-4f1f-9893-faf3ea38806c\",\"type\":\"ColumnDataSource\"}},\"id\":\"85be5f7b-6e27-4891-8097-aea939802587\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"25cac6a0-7c17-4fbe-bf97-07056d72f12f\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"8746336a-c725-44a0-9b9d-808e295d5fe0\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"d7886736-f66f-4f46-9203-221e3ff7da46\",\"type\":\"HelpTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"3e823cb1-245a-4f30-960b-a3b743b68c46\",\"type\":\"PanTool\"},{\"id\":\"b0018d60-14d1-40f2-9dea-5170ab264a96\",\"type\":\"WheelZoomTool\"},{\"id\":\"1d467055-1174-4ab4-b5f5-71c546d5fba2\",\"type\":\"BoxZoomTool\"},{\"id\":\"f746c554-6103-46d0-bcf0-ae1c95da3bd1\",\"type\":\"SaveTool\"},{\"id\":\"557f2278-14a2-47d1-88c5-96fbc488748a\",\"type\":\"ResetTool\"},{\"id\":\"d7886736-f66f-4f46-9203-221e3ff7da46\",\"type\":\"HelpTool\"}]},\"id\":\"dac28597-e94b-4e2c-b66b-577683171a87\",\"type\":\"Toolbar\"},{\"attributes\":{\"callback\":null},\"id\":\"0eb3873c-b17e-4aec-8267-76dda47638fc\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.3},\"fill_color\":{\"value\":\"blue\"},\"line_alpha\":{\"value\":0.3},\"line_color\":{\"value\":\"blue\"},\"size\":{\"units\":\"screen\",\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"396318f8-8c68-4c82-8aa4-4cb51beb704e\",\"type\":\"Triangle\"},{\"attributes\":{\"label\":{\"value\":\"Japanese\"},\"renderers\":[{\"id\":\"d0ce224a-b212-42c4-b185-7149c62326b5\",\"type\":\"GlyphRenderer\"}]},\"id\":\"c3b5d73d-f1d7-483b-a110-76201f47499b\",\"type\":\"LegendItem\"},{\"attributes\":{\"callback\":null},\"id\":\"60ff39d0-7b63-42b2-b966-7efe4880b1f1\",\"type\":\"DataRange1d\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"71febb92-34b9-4d8c-9385-c2e1d097b0f1\",\"type\":\"BoxAnnotation\"}],\"root_ids\":[\"42a1e000-ac23-4612-97b0-2fded48d2234\"]},\"title\":\"Bokeh Application\",\"version\":\"0.13.0\"}};\n", + " var render_items = [{\"docid\":\"bad1f4b5-c81b-4fc1-872b-70166b3d66a6\",\"roots\":{\"42a1e000-ac23-4612-97b0-2fded48d2234\":\"92409529-2443-4698-83d8-8ad84ee19e96\"}}];\n", + " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", + "\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " } else {\n", + " var attempts = 0;\n", + " var timer = setInterval(function(root) {\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " clearInterval(timer);\n", + " }\n", + " attempts++;\n", + " if (attempts > 100) {\n", + " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", + " clearInterval(timer);\n", + " }\n", + " }, 10, root)\n", + " }\n", + "})(window);" + ], + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "42a1e000-ac23-4612-97b0-2fded48d2234" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "p = figure(title=\"MPG by Year (Japan and US)\")\n", + "\n", + "p.vbar(x=years, bottom=avg-std, top=avg+std, width=0.8, \n", + " fill_alpha=0.2, line_color=None, legend=\"MPG 1 stddev\")\n", + "\n", + "p.circle(x=japanese[\"yr\"], y=japanese[\"mpg\"], size=10, alpha=0.5,\n", + " color=\"red\", legend=\"Japanese\")\n", + "\n", + "p.triangle(x=american[\"yr\"], y=american[\"mpg\"], size=10, alpha=0.3,\n", + " color=\"blue\", legend=\"American\")\n", + "\n", + "p.legend.location = \"top_left\"\n", + "show(p)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**This kind of approach can be used to generate other kinds of interesting plots. See many more examples in the [Bokeh Documentation Gallery](https://bokeh.pydata.org/en/latest/docs/gallery.html). **" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Linked Brushing\n", + "\n", + "To link plots together at a data level, we can explicitly wrap the data in a `ColumnDataSource`. This allows us to reference columns by name.\n", + "\n", + "We can use a \"select\" tool to select points on one plot, and the linked points on the other plots will highlight." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "(function(root) {\n", + " function embed_document(root) {\n", + " \n", + " var docs_json = {\"ebe9aadd-28b2-446b-8080-884f2d424dfc\":{\"roots\":{\"references\":[{\"attributes\":{\"tools\":[{\"id\":\"46e47af1-f0b8-4b5c-8c9d-ef05aba18974\",\"type\":\"PanTool\"},{\"id\":\"07c613ba-492a-4f54-8412-a80b047da384\",\"type\":\"WheelZoomTool\"},{\"id\":\"5df2e44a-78e3-4a99-95dc-4d00680979bd\",\"type\":\"BoxZoomTool\"},{\"id\":\"4df93f3b-5965-4df4-bb03-777f0190091b\",\"type\":\"BoxSelectTool\"},{\"id\":\"1fde3b6a-4f8c-4fb1-8592-7c1127caf135\",\"type\":\"LassoSelectTool\"},{\"id\":\"7055d611-7ffa-41d5-8073-8ffd5caee9fe\",\"type\":\"PanTool\"},{\"id\":\"bb251479-cd93-4715-b49a-1fb4d08036aa\",\"type\":\"WheelZoomTool\"},{\"id\":\"a432bd36-6556-4cc9-aa2a-9b95dac7b538\",\"type\":\"BoxZoomTool\"},{\"id\":\"70407e69-128d-4da0-a2a6-40289af24f5e\",\"type\":\"BoxSelectTool\"},{\"id\":\"e0e1c06e-c125-45b8-bf9c-9ad4f35247f2\",\"type\":\"LassoSelectTool\"},{\"id\":\"815ee431-91c4-4a81-a98a-2743d2e0364d\",\"type\":\"PanTool\"},{\"id\":\"3a39e97d-41a1-4f95-9c74-6fa6613080bb\",\"type\":\"WheelZoomTool\"},{\"id\":\"50f4878c-0841-473a-b7a3-e5a8af0319e2\",\"type\":\"BoxZoomTool\"},{\"id\":\"23e320ad-9dd7-450c-9181-780842fbfffc\",\"type\":\"BoxSelectTool\"},{\"id\":\"eacfcb3f-8321-4ea9-93f6-707acc6dc073\",\"type\":\"LassoSelectTool\"}]},\"id\":\"2a93a995-357f-4110-b02b-36b13bcc4057\",\"type\":\"ProxyToolbar\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"46e47af1-f0b8-4b5c-8c9d-ef05aba18974\",\"type\":\"PanTool\"},{\"id\":\"07c613ba-492a-4f54-8412-a80b047da384\",\"type\":\"WheelZoomTool\"},{\"id\":\"5df2e44a-78e3-4a99-95dc-4d00680979bd\",\"type\":\"BoxZoomTool\"},{\"id\":\"4df93f3b-5965-4df4-bb03-777f0190091b\",\"type\":\"BoxSelectTool\"},{\"id\":\"1fde3b6a-4f8c-4fb1-8592-7c1127caf135\",\"type\":\"LassoSelectTool\"}]},\"id\":\"b3ff8cf1-e078-4e96-8533-bfcbe29b7521\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"d2bd386f-c6d9-4f30-afa1-0022dae3bdb6\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"xs_units\":\"screen\",\"ys_units\":\"screen\"},\"id\":\"4f72e8c0-f80b-463c-a6d1-67943de202f5\",\"type\":\"PolyAnnotation\"},{\"attributes\":{},\"id\":\"c5410e18-bdcf-4e8b-b07e-4d4d5d07947d\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"below\":[{\"id\":\"ba8964da-5c1f-4fa7-a25a-7f222b1261e2\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"12582152-7b9c-4b13-9438-11955f25af4f\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"plot_width\":300,\"renderers\":[{\"id\":\"ba8964da-5c1f-4fa7-a25a-7f222b1261e2\",\"type\":\"LinearAxis\"},{\"id\":\"d1c51ecf-7a16-4028-8b66-690e53521228\",\"type\":\"Grid\"},{\"id\":\"12582152-7b9c-4b13-9438-11955f25af4f\",\"type\":\"LinearAxis\"},{\"id\":\"a35fecc1-f190-42f8-b777-68cf551a13e0\",\"type\":\"Grid\"},{\"id\":\"e98124fe-e8b3-4e19-9439-ed4a1aee5e3b\",\"type\":\"BoxAnnotation\"},{\"id\":\"07653174-3d27-4cc5-a495-672ad6721b6e\",\"type\":\"BoxAnnotation\"},{\"id\":\"4f72e8c0-f80b-463c-a6d1-67943de202f5\",\"type\":\"PolyAnnotation\"},{\"id\":\"393b89d2-306f-4f0f-ab25-ee9d8bcb0985\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"d196ef01-482f-4a4c-a0f5-040c1ada86c3\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"b3ff8cf1-e078-4e96-8533-bfcbe29b7521\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"a3951156-7088-43d3-b550-5e113cc73ca1\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"4c5e947f-7b93-4633-a72d-e917077268a2\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"fd0a6cfc-5f64-4903-90a9-0ac2a13fbbb1\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"aca98ba7-6222-4652-9682-956845fe66dc\",\"type\":\"LinearScale\"}},\"id\":\"5b45f574-705b-4dbe-aa1c-b754111dbc88\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"x\":{\"field\":\"hp\"},\"y\":{\"field\":\"displ\"}},\"id\":\"8c72aeb2-0523-4b89-a151-386237977740\",\"type\":\"Circle\"},{\"attributes\":{\"plot\":null,\"text\":\"MPG vs. Displacement\"},\"id\":\"fd43b49d-7ee4-4a08-86ea-8718e22f326e\",\"type\":\"Title\"},{\"attributes\":{\"formatter\":{\"id\":\"536d57be-f9c9-44dc-825a-4d80b9b42a0e\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"108a9df1-c7dc-4dd8-93f4-6ef11a764c62\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"c257bb12-da72-426d-953f-e5f517815c19\",\"type\":\"BasicTicker\"}},\"id\":\"77cae6d1-effd-4db5-86b8-e38c0d6d2ff2\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null},\"id\":\"25c6b4ba-eb58-4714-9cc0-95175ed36ebf\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"yr\"},\"y\":{\"field\":\"mpg\"}},\"id\":\"d49044d6-4b2a-47bd-8ab2-8203136e66c7\",\"type\":\"Circle\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"07653174-3d27-4cc5-a495-672ad6721b6e\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"3492d33f-6a3b-4723-ac3c-e81be9d5dbcb\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"9df7caee-63be-487a-8913-2ff7069943ff\",\"type\":\"BasicTicker\"}},\"id\":\"a3ef9039-d5be-4058-95bc-a2f2d346218e\",\"type\":\"Grid\"},{\"attributes\":{\"toolbar\":{\"id\":\"2a93a995-357f-4110-b02b-36b13bcc4057\",\"type\":\"ProxyToolbar\"}},\"id\":\"d34aee21-dae8-455d-aacf-73ba965381a8\",\"type\":\"ToolbarBox\"},{\"attributes\":{\"fill_color\":{\"value\":null},\"line_color\":{\"value\":\"red\"},\"size\":{\"field\":\"cyl\",\"units\":\"screen\"},\"x\":{\"field\":\"mpg\"},\"y\":{\"field\":\"displ\"}},\"id\":\"7b1a0db5-1529-443d-a214-b6281e1f053a\",\"type\":\"Circle\"},{\"attributes\":{\"plot\":{\"id\":\"5b45f574-705b-4dbe-aa1c-b754111dbc88\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"41b93bd7-373f-414f-bd0a-f298bf00a8fb\",\"type\":\"BasicTicker\"}},\"id\":\"d1c51ecf-7a16-4028-8b66-690e53521228\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"7d7b3400-2ebb-4d24-b2fd-ec8adad9fd5f\",\"type\":\"Selection\"},{\"attributes\":{\"data_source\":{\"id\":\"d974326b-33fb-4552-84c2-6177e9453f85\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"7b1a0db5-1529-443d-a214-b6281e1f053a\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"21c6e380-be49-4543-904a-cd03275d3334\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"69d7b488-7878-44bf-b686-f828b2f69c15\",\"type\":\"CDSView\"}},\"id\":\"2f9f1d17-8932-4255-9613-580940d08043\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"plot\":{\"id\":\"3492d33f-6a3b-4723-ac3c-e81be9d5dbcb\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"29aef531-4694-4067-8508-6ae30049a81e\",\"type\":\"BasicTicker\"}},\"id\":\"e2b43aec-7295-4ce1-99f0-c57bfc19d3ea\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"xs_units\":\"screen\",\"ys_units\":\"screen\"},\"id\":\"662ac094-01cf-48d8-bf22-7bfec7210826\",\"type\":\"PolyAnnotation\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"5b45f574-705b-4dbe-aa1c-b754111dbc88\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"d2bd386f-c6d9-4f30-afa1-0022dae3bdb6\",\"type\":\"BasicTicker\"}},\"id\":\"a35fecc1-f190-42f8-b777-68cf551a13e0\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"fc997f8c-65d0-4946-b797-70aecafda14b\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"108a9df1-c7dc-4dd8-93f4-6ef11a764c62\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"a6316d45-4b2d-47eb-be52-6cd3ab84e396\",\"type\":\"BasicTicker\"}},\"id\":\"4913db13-fbfa-46fb-97ea-8dab52923318\",\"type\":\"LinearAxis\"},{\"attributes\":{\"formatter\":{\"id\":\"eb2f0e7a-d367-4d03-a9ee-e0b01200a9eb\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"3492d33f-6a3b-4723-ac3c-e81be9d5dbcb\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"29aef531-4694-4067-8508-6ae30049a81e\",\"type\":\"BasicTicker\"}},\"id\":\"2937c708-30bd-4325-9dd4-cd2a00ec7a1c\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null},\"id\":\"5997a9ec-e438-4658-b7d0-3071b2064e06\",\"type\":\"DataRange1d\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"e98124fe-e8b3-4e19-9439-ed4a1aee5e3b\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"children\":[{\"id\":\"5ca5d37a-32c6-4327-943a-4040d936d035\",\"type\":\"Column\"},{\"id\":\"d34aee21-dae8-455d-aacf-73ba965381a8\",\"type\":\"ToolbarBox\"}]},\"id\":\"f45a8a50-7184-4c9f-a979-e5d77e1eecef\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1565d7a4-2965-42a2-8a8c-645fa20c3180\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"formatter\":{\"id\":\"c5410e18-bdcf-4e8b-b07e-4d4d5d07947d\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"3492d33f-6a3b-4723-ac3c-e81be9d5dbcb\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"9df7caee-63be-487a-8913-2ff7069943ff\",\"type\":\"BasicTicker\"}},\"id\":\"40befc8c-8064-4ae1-bd88-511ff3cb6dff\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1782d61c-8b69-4d37-bbfa-1d61c97b1fe7\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null,\"overlay\":{\"id\":\"cfeb145f-52db-4ae5-9a2a-0ec0d4561415\",\"type\":\"BoxAnnotation\"}},\"id\":\"23e320ad-9dd7-450c-9181-780842fbfffc\",\"type\":\"BoxSelectTool\"},{\"attributes\":{},\"id\":\"bb251479-cd93-4715-b49a-1fb4d08036aa\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"a6316d45-4b2d-47eb-be52-6cd3ab84e396\",\"type\":\"BasicTicker\"},{\"attributes\":{\"plot\":null,\"text\":\"MPG by Year\"},\"id\":\"d196ef01-482f-4a4c-a0f5-040c1ada86c3\",\"type\":\"Title\"},{\"attributes\":{\"children\":[{\"id\":\"5b45f574-705b-4dbe-aa1c-b754111dbc88\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"id\":\"3492d33f-6a3b-4723-ac3c-e81be9d5dbcb\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"id\":\"108a9df1-c7dc-4dd8-93f4-6ef11a764c62\",\"subtype\":\"Figure\",\"type\":\"Plot\"}]},\"id\":\"5ec13a8e-cbce-47cf-bc29-6af0b87685e2\",\"type\":\"Row\"},{\"attributes\":{\"below\":[{\"id\":\"4913db13-fbfa-46fb-97ea-8dab52923318\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"77cae6d1-effd-4db5-86b8-e38c0d6d2ff2\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"plot_width\":300,\"renderers\":[{\"id\":\"4913db13-fbfa-46fb-97ea-8dab52923318\",\"type\":\"LinearAxis\"},{\"id\":\"7c437abe-0069-4d6e-8454-2bf5a61780b2\",\"type\":\"Grid\"},{\"id\":\"77cae6d1-effd-4db5-86b8-e38c0d6d2ff2\",\"type\":\"LinearAxis\"},{\"id\":\"d625609a-f0e4-4471-b285-5f0ca15c1eaf\",\"type\":\"Grid\"},{\"id\":\"49328a09-eab9-48eb-ad97-d1c61c9ae948\",\"type\":\"BoxAnnotation\"},{\"id\":\"cfeb145f-52db-4ae5-9a2a-0ec0d4561415\",\"type\":\"BoxAnnotation\"},{\"id\":\"662ac094-01cf-48d8-bf22-7bfec7210826\",\"type\":\"PolyAnnotation\"},{\"id\":\"2f9f1d17-8932-4255-9613-580940d08043\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"fd43b49d-7ee4-4a08-86ea-8718e22f326e\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"97dc1320-8901-4f56-9f58-77937028c23b\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"5997a9ec-e438-4658-b7d0-3071b2064e06\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"8caaa54b-8cf7-48f0-b378-995837cdc9a8\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"b51fc315-99c4-43d5-9125-8d97a12550b5\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"06792786-ab05-4c5e-b224-bb9d652e3f03\",\"type\":\"LinearScale\"}},\"id\":\"108a9df1-c7dc-4dd8-93f4-6ef11a764c62\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"formatter\":{\"id\":\"1565d7a4-2965-42a2-8a8c-645fa20c3180\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"5b45f574-705b-4dbe-aa1c-b754111dbc88\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"41b93bd7-373f-414f-bd0a-f298bf00a8fb\",\"type\":\"BasicTicker\"}},\"id\":\"ba8964da-5c1f-4fa7-a25a-7f222b1261e2\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"41b93bd7-373f-414f-bd0a-f298bf00a8fb\",\"type\":\"BasicTicker\"},{\"attributes\":{\"plot\":null,\"text\":\"HP vs. Displacement\"},\"id\":\"921437aa-2c25-42cd-bfda-f52597c02cc5\",\"type\":\"Title\"},{\"attributes\":{\"data_source\":{\"id\":\"d974326b-33fb-4552-84c2-6177e9453f85\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"00e94cb8-99c5-4345-95cc-31dcda019afc\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"d49044d6-4b2a-47bd-8ab2-8203136e66c7\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"ed0e8b58-5d38-4492-9424-fe49a06d1978\",\"type\":\"CDSView\"}},\"id\":\"393b89d2-306f-4f0f-ab25-ee9d8bcb0985\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"108a9df1-c7dc-4dd8-93f4-6ef11a764c62\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"c257bb12-da72-426d-953f-e5f517815c19\",\"type\":\"BasicTicker\"}},\"id\":\"d625609a-f0e4-4471-b285-5f0ca15c1eaf\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1ba0d6ea-29fd-423d-95f7-a4c8431e47f5\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"9df7caee-63be-487a-8913-2ff7069943ff\",\"type\":\"BasicTicker\"},{\"attributes\":{\"overlay\":{\"id\":\"49328a09-eab9-48eb-ad97-d1c61c9ae948\",\"type\":\"BoxAnnotation\"}},\"id\":\"50f4878c-0841-473a-b7a3-e5a8af0319e2\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"callback\":null,\"data\":{\"accel\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[392]},\"cyl\":[8,8,8,8,8,8,8,8,8,8,8,8,8,8,4,6,6,6,4,4,4,4,4,4,6,8,8,8,8,4,4,4,6,6,6,6,6,8,8,8,8,8,8,8,6,4,6,6,4,4,4,4,4,4,4,4,4,4,4,4,4,8,8,8,8,8,8,8,8,8,3,8,8,8,8,4,4,4,4,4,4,4,4,4,8,8,8,8,8,8,8,8,8,8,8,8,6,6,6,6,6,4,8,8,8,8,6,4,4,4,3,4,6,4,8,8,4,4,4,4,8,4,6,8,6,6,6,4,4,4,4,6,6,6,8,8,8,8,8,4,4,4,4,4,4,4,4,4,4,4,6,6,6,6,8,8,8,8,6,6,6,6,6,8,8,4,4,6,4,4,4,4,6,4,6,4,4,4,4,4,4,4,4,4,4,8,8,8,8,6,6,6,6,4,4,4,4,6,6,6,6,4,4,4,4,4,8,4,6,6,8,8,8,8,4,4,4,4,4,8,8,8,8,6,6,6,6,8,8,8,8,4,4,4,4,4,4,4,4,6,4,3,4,4,4,4,4,8,8,8,6,6,6,4,6,6,6,6,6,6,8,6,8,8,4,4,4,4,4,4,4,4,5,6,4,6,4,4,6,6,4,6,6,8,8,8,8,8,8,8,8,4,4,4,4,5,8,4,8,4,4,4,4,4,6,6,4,4,4,4,4,4,4,4,6,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,6,3,4,4,4,4,4,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,6,6,6,6,8,6,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,6,6,4,6,4,4,4,4,4,4,4,4],\"displ\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[392]},\"hp\":[130,165,150,150,140,198,220,215,225,190,170,160,150,225,95,95,97,85,88,46,87,90,95,113,90,215,200,210,193,88,90,95,100,105,100,88,100,165,175,153,150,180,170,175,110,72,100,88,86,90,70,76,65,69,60,70,95,80,54,90,86,165,175,150,153,150,208,155,160,190,97,150,130,140,150,112,76,87,69,86,92,97,80,88,175,150,145,137,150,198,150,158,150,215,225,175,105,100,100,88,95,46,150,167,170,180,100,88,72,94,90,85,107,90,145,230,49,75,91,112,150,110,122,180,95,100,100,67,80,65,75,100,110,105,140,150,150,140,150,83,67,78,52,61,75,75,75,97,93,67,95,105,72,72,170,145,150,148,110,105,110,95,110,110,129,75,83,100,78,96,71,97,97,70,90,95,88,98,115,53,86,81,92,79,83,140,150,120,152,100,105,81,90,52,60,70,53,100,78,110,95,71,70,75,72,102,150,88,108,120,180,145,130,150,68,80,58,96,70,145,110,145,130,110,105,100,98,180,170,190,149,78,88,75,89,63,83,67,78,97,110,110,48,66,52,70,60,110,140,139,105,95,85,88,100,90,105,85,110,120,145,165,139,140,68,95,97,75,95,105,85,97,103,125,115,133,71,68,115,85,88,90,110,130,129,138,135,155,142,125,150,71,65,80,80,77,125,71,90,70,70,65,69,90,115,115,90,76,60,70,65,90,88,90,90,78,90,75,92,75,65,105,65,48,48,67,67,67,67,62,132,100,88,72,84,84,92,110,84,58,64,60,67,65,62,68,63,65,65,74,75,75,100,74,80,76,116,120,110,105,88,85,88,88,88,85,84,90,92,74,68,68,63,70,88,75,70,67,67,67,110,85,92,112,96,84,90,86,52,84,79,82],\"index\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391],\"mpg\":{\"__ndarray__\":\"AAAAAAAAMkAAAAAAAAAuQAAAAAAAADJAAAAAAAAAMEAAAAAAAAAxQAAAAAAAAC5AAAAAAAAALEAAAAAAAAAsQAAAAAAAACxAAAAAAAAALkAAAAAAAAAuQAAAAAAAACxAAAAAAAAALkAAAAAAAAAsQAAAAAAAADhAAAAAAAAANkAAAAAAAAAyQAAAAAAAADVAAAAAAAAAO0AAAAAAAAA6QAAAAAAAADlAAAAAAAAAOEAAAAAAAAA5QAAAAAAAADpAAAAAAAAANUAAAAAAAAAkQAAAAAAAACRAAAAAAAAAJkAAAAAAAAAiQAAAAAAAADtAAAAAAAAAPEAAAAAAAAA5QAAAAAAAADNAAAAAAAAAMEAAAAAAAAAxQAAAAAAAADNAAAAAAAAAMkAAAAAAAAAsQAAAAAAAACxAAAAAAAAALEAAAAAAAAAsQAAAAAAAAChAAAAAAAAAKkAAAAAAAAAqQAAAAAAAADJAAAAAAAAANkAAAAAAAAAzQAAAAAAAADJAAAAAAAAAN0AAAAAAAAA8QAAAAAAAAD5AAAAAAAAAPkAAAAAAAAA/QAAAAAAAgEFAAAAAAAAAO0AAAAAAAAA6QAAAAAAAADhAAAAAAAAAOUAAAAAAAAA3QAAAAAAAADRAAAAAAAAANUAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAsQAAAAAAAADFAAAAAAAAAJkAAAAAAAAAqQAAAAAAAAChAAAAAAAAAKkAAAAAAAAAzQAAAAAAAAC5AAAAAAAAAKkAAAAAAAAAqQAAAAAAAACxAAAAAAAAAMkAAAAAAAAA2QAAAAAAAADVAAAAAAAAAOkAAAAAAAAA2QAAAAAAAADxAAAAAAAAAN0AAAAAAAAA8QAAAAAAAADtAAAAAAAAAKkAAAAAAAAAsQAAAAAAAACpAAAAAAAAALEAAAAAAAAAuQAAAAAAAAChAAAAAAAAAKkAAAAAAAAAqQAAAAAAAACxAAAAAAAAAKkAAAAAAAAAoQAAAAAAAACpAAAAAAAAAMkAAAAAAAAAwQAAAAAAAADJAAAAAAAAAMkAAAAAAAAA3QAAAAAAAADpAAAAAAAAAJkAAAAAAAAAoQAAAAAAAACpAAAAAAAAAKEAAAAAAAAAyQAAAAAAAADRAAAAAAAAANUAAAAAAAAA2QAAAAAAAADJAAAAAAAAAM0AAAAAA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\",\"dtype\":\"float64\",\"shape\":[392]},\"name\":[\"chevrolet chevelle malibu\",\"buick skylark 320\",\"plymouth satellite\",\"amc rebel sst\",\"ford torino\",\"ford galaxie 500\",\"chevrolet impala\",\"plymouth fury iii\",\"pontiac catalina\",\"amc ambassador dpl\",\"dodge challenger se\",\"plymouth 'cuda 340\",\"chevrolet monte carlo\",\"buick estate wagon (sw)\",\"toyota corona mark ii\",\"plymouth duster\",\"amc hornet\",\"ford maverick\",\"datsun pl510\",\"volkswagen 1131 deluxe sedan\",\"peugeot 504\",\"audi 100 ls\",\"saab 99e\",\"bmw 2002\",\"amc gremlin\",\"ford f250\",\"chevy c20\",\"dodge d200\",\"hi 1200d\",\"datsun pl510\",\"chevrolet vega 2300\",\"toyota corona\",\"amc gremlin\",\"plymouth satellite custom\",\"chevrolet chevelle malibu\",\"ford torino 500\",\"amc matador\",\"chevrolet impala\",\"pontiac catalina brougham\",\"ford galaxie 500\",\"plymouth fury iii\",\"dodge monaco (sw)\",\"ford country squire (sw)\",\"pontiac safari (sw)\",\"amc hornet sportabout (sw)\",\"chevrolet vega (sw)\",\"pontiac firebird\",\"ford mustang\",\"mercury capri 2000\",\"opel 1900\",\"peugeot 304\",\"fiat 124b\",\"toyota corolla 1200\",\"datsun 1200\",\"volkswagen model 111\",\"plymouth cricket\",\"toyota corona hardtop\",\"dodge colt hardtop\",\"volkswagen type 3\",\"chevrolet vega\",\"ford pinto runabout\",\"chevrolet impala\",\"pontiac catalina\",\"plymouth fury iii\",\"ford galaxie 500\",\"amc ambassador sst\",\"mercury marquis\",\"buick lesabre custom\",\"oldsmobile delta 88 royale\",\"chrysler newport royal\",\"mazda rx2 coupe\",\"amc matador (sw)\",\"chevrolet chevelle concours (sw)\",\"ford gran torino (sw)\",\"plymouth satellite custom (sw)\",\"volvo 145e (sw)\",\"volkswagen 411 (sw)\",\"peugeot 504 (sw)\",\"renault 12 (sw)\",\"ford pinto (sw)\",\"datsun 510 (sw)\",\"toyouta corona mark ii (sw)\",\"dodge colt (sw)\",\"toyota corolla 1600 (sw)\",\"buick century 350\",\"amc matador\",\"chevrolet malibu\",\"ford gran torino\",\"dodge coronet custom\",\"mercury marquis brougham\",\"chevrolet caprice classic\",\"ford ltd\",\"plymouth fury gran sedan\",\"chrysler new yorker brougham\",\"buick electra 225 custom\",\"amc ambassador brougham\",\"plymouth valiant\",\"chevrolet nova custom\",\"amc hornet\",\"ford maverick\",\"plymouth duster\",\"volkswagen super beetle\",\"chevrolet impala\",\"ford country\",\"plymouth custom suburb\",\"oldsmobile vista cruiser\",\"amc gremlin\",\"toyota carina\",\"chevrolet vega\",\"datsun 610\",\"maxda rx3\",\"ford pinto\",\"mercury capri v6\",\"fiat 124 sport coupe\",\"chevrolet monte carlo s\",\"pontiac grand prix\",\"fiat 128\",\"opel manta\",\"audi 100ls\",\"volvo 144ea\",\"dodge dart custom\",\"saab 99le\",\"toyota mark ii\",\"oldsmobile omega\",\"plymouth duster\",\"amc hornet\",\"chevrolet nova\",\"datsun b210\",\"ford pinto\",\"toyota corolla 1200\",\"chevrolet vega\",\"chevrolet chevelle malibu classic\",\"amc matador\",\"plymouth satellite sebring\",\"ford gran torino\",\"buick century luxus (sw)\",\"dodge coronet custom (sw)\",\"ford gran torino (sw)\",\"amc matador (sw)\",\"audi fox\",\"volkswagen dasher\",\"opel manta\",\"toyota corona\",\"datsun 710\",\"dodge colt\",\"fiat 128\",\"fiat 124 tc\",\"honda civic\",\"subaru\",\"fiat x1.9\",\"plymouth valiant custom\",\"chevrolet nova\",\"mercury monarch\",\"ford maverick\",\"pontiac catalina\",\"chevrolet bel air\",\"plymouth grand fury\",\"ford ltd\",\"buick century\",\"chevroelt chevelle malibu\",\"amc matador\",\"plymouth fury\",\"buick skyhawk\",\"chevrolet monza 2+2\",\"ford mustang ii\",\"toyota corolla\",\"ford pinto\",\"amc gremlin\",\"pontiac astro\",\"toyota corona\",\"volkswagen dasher\",\"datsun 710\",\"ford pinto\",\"volkswagen rabbit\",\"amc pacer\",\"audi 100ls\",\"peugeot 504\",\"volvo 244dl\",\"saab 99le\",\"honda civic cvcc\",\"fiat 131\",\"opel 1900\",\"capri ii\",\"dodge colt\",\"renault 12tl\",\"chevrolet chevelle malibu classic\",\"dodge coronet brougham\",\"amc matador\",\"ford gran torino\",\"plymouth valiant\",\"chevrolet nova\",\"ford maverick\",\"amc hornet\",\"chevrolet chevette\",\"chevrolet woody\",\"vw rabbit\",\"honda civic\",\"dodge aspen se\",\"ford granada ghia\",\"pontiac ventura sj\",\"amc pacer d/l\",\"volkswagen rabbit\",\"datsun b-210\",\"toyota corolla\",\"ford pinto\",\"volvo 245\",\"plymouth volare premier v8\",\"peugeot 504\",\"toyota mark ii\",\"mercedes-benz 280s\",\"cadillac seville\",\"chevy c10\",\"ford f108\",\"dodge d100\",\"honda accord cvcc\",\"buick opel isuzu deluxe\",\"renault 5 gtl\",\"plymouth arrow gs\",\"datsun f-10 hatchback\",\"chevrolet caprice classic\",\"oldsmobile cutlass supreme\",\"dodge monaco brougham\",\"mercury cougar brougham\",\"chevrolet concours\",\"buick skylark\",\"plymouth volare custom\",\"ford granada\",\"pontiac grand prix lj\",\"chevrolet monte carlo landau\",\"chrysler cordoba\",\"ford thunderbird\",\"volkswagen rabbit custom\",\"pontiac sunbird coupe\",\"toyota corolla liftback\",\"ford mustang ii 2+2\",\"chevrolet chevette\",\"dodge colt m/m\",\"subaru dl\",\"volkswagen dasher\",\"datsun 810\",\"bmw 320i\",\"mazda rx-4\",\"volkswagen rabbit custom diesel\",\"ford fiesta\",\"mazda glc deluxe\",\"datsun b210 gx\",\"honda civic cvcc\",\"oldsmobile cutlass salon brougham\",\"dodge diplomat\",\"mercury monarch ghia\",\"pontiac phoenix lj\",\"chevrolet malibu\",\"ford fairmont (auto)\",\"ford fairmont (man)\",\"plymouth volare\",\"amc concord\",\"buick century special\",\"mercury zephyr\",\"dodge aspen\",\"amc concord d/l\",\"chevrolet monte carlo landau\",\"buick regal sport coupe (turbo)\",\"ford futura\",\"dodge magnum xe\",\"chevrolet chevette\",\"toyota corona\",\"datsun 510\",\"dodge omni\",\"toyota celica gt liftback\",\"plymouth sapporo\",\"oldsmobile starfire sx\",\"datsun 200-sx\",\"audi 5000\",\"volvo 264gl\",\"saab 99gle\",\"peugeot 604sl\",\"volkswagen scirocco\",\"honda accord lx\",\"pontiac lemans v6\",\"mercury zephyr 6\",\"ford fairmont 4\",\"amc concord dl 6\",\"dodge aspen 6\",\"chevrolet caprice classic\",\"ford ltd landau\",\"mercury grand marquis\",\"dodge st. regis\",\"buick estate wagon (sw)\",\"ford country squire (sw)\",\"chevrolet malibu classic (sw)\",\"chrysler lebaron town @ country (sw)\",\"vw rabbit custom\",\"maxda glc deluxe\",\"dodge colt hatchback custom\",\"amc spirit dl\",\"mercedes benz 300d\",\"cadillac eldorado\",\"peugeot 504\",\"oldsmobile cutlass salon brougham\",\"plymouth horizon\",\"plymouth horizon tc3\",\"datsun 210\",\"fiat strada custom\",\"buick skylark limited\",\"chevrolet citation\",\"oldsmobile omega brougham\",\"pontiac phoenix\",\"vw rabbit\",\"toyota corolla tercel\",\"chevrolet chevette\",\"datsun 310\",\"chevrolet citation\",\"ford fairmont\",\"amc concord\",\"dodge aspen\",\"audi 4000\",\"toyota corona liftback\",\"mazda 626\",\"datsun 510 hatchback\",\"toyota corolla\",\"mazda glc\",\"dodge colt\",\"datsun 210\",\"vw rabbit c (diesel)\",\"vw dasher (diesel)\",\"audi 5000s (diesel)\",\"mercedes-benz 240d\",\"honda civic 1500 gl\",\"subaru dl\",\"vokswagen rabbit\",\"datsun 280-zx\",\"mazda rx-7 gs\",\"triumph tr7 coupe\",\"honda accord\",\"plymouth reliant\",\"buick skylark\",\"dodge aries wagon (sw)\",\"chevrolet citation\",\"plymouth reliant\",\"toyota starlet\",\"plymouth champ\",\"honda civic 1300\",\"subaru\",\"datsun 210 mpg\",\"toyota tercel\",\"mazda glc 4\",\"plymouth horizon 4\",\"ford escort 4w\",\"ford escort 2h\",\"volkswagen jetta\",\"honda prelude\",\"toyota corolla\",\"datsun 200sx\",\"mazda 626\",\"peugeot 505s turbo diesel\",\"volvo diesel\",\"toyota cressida\",\"datsun 810 maxima\",\"buick century\",\"oldsmobile cutlass ls\",\"ford granada gl\",\"chrysler lebaron salon\",\"chevrolet cavalier\",\"chevrolet cavalier wagon\",\"chevrolet cavalier 2-door\",\"pontiac j2000 se hatchback\",\"dodge aries se\",\"pontiac phoenix\",\"ford fairmont futura\",\"volkswagen rabbit l\",\"mazda glc custom l\",\"mazda glc custom\",\"plymouth horizon miser\",\"mercury lynx l\",\"nissan stanza xe\",\"honda accord\",\"toyota corolla\",\"honda civic\",\"honda civic (auto)\",\"datsun 310 gx\",\"buick century limited\",\"oldsmobile cutlass ciera (diesel)\",\"chrysler lebaron medallion\",\"ford granada l\",\"toyota celica gt\",\"dodge charger 2.2\",\"chevrolet camaro\",\"ford mustang gl\",\"vw pickup\",\"dodge rampage\",\"ford ranger\",\"chevy s-10\"],\"origin\":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,3,2,2,2,2,2,1,1,1,1,1,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,2,1,3,1,2,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,2,2,2,2,1,3,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,3,1,3,3,1,1,2,1,1,2,2,2,2,1,2,3,1,1,1,1,3,1,3,1,1,1,1,1,1,1,1,1,2,2,2,3,3,1,2,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,3,2,3,1,2,1,2,2,2,2,3,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,3,1,1,1,1,2,3,3,1,2,1,2,3,2,1,1,1,1,3,1,2,1,3,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,1,1,1,3,2,3,2,3,2,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,3,1,1,3,2,2,2,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,1,1,2,1,2,1,1,1,3,2,1,1,1,1,2,3,1,3,1,1,1,1,2,3,3,3,3,3,1,3,2,2,2,2,3,3,2,3,3,2,3,1,1,1,1,1,3,1,3,3,3,3,3,1,1,1,2,3,3,3,3,2,2,3,3,1,1,1,1,1,1,1,1,1,1,1,2,3,3,1,1,3,3,3,3,3,3,1,1,1,1,3,1,1,1,2,1,1,1],\"weight\":[3504,3693,3436,3433,3449,4341,4354,4312,4425,3850,3563,3609,3761,3086,2372,2833,2774,2587,2130,1835,2672,2430,2375,2234,2648,4615,4376,4382,4732,2130,2264,2228,2634,3439,3329,3302,3288,4209,4464,4154,4096,4955,4746,5140,2962,2408,3282,3139,2220,2123,2074,2065,1773,1613,1834,1955,2278,2126,2254,2408,2226,4274,4385,4135,4129,3672,4633,4502,4456,4422,2330,3892,4098,4294,4077,2933,2511,2979,2189,2395,2288,2506,2164,2100,4100,3672,3988,4042,3777,4952,4464,4363,4237,4735,4951,3821,3121,3278,2945,3021,2904,1950,4997,4906,4654,4499,2789,2279,2401,2379,2124,2310,2472,2265,4082,4278,1867,2158,2582,2868,3399,2660,2807,3664,3102,2901,3336,1950,2451,1836,2542,3781,3632,3613,4141,4699,4457,4638,4257,2219,1963,2300,1649,2003,2125,2108,2246,2489,2391,2000,3264,3459,3432,3158,4668,4440,4498,4657,3907,3897,3730,3785,3039,3221,3169,2171,2639,2914,2592,2702,2223,2545,2984,1937,3211,2694,2957,2945,2671,1795,2464,2220,2572,2255,2202,4215,4190,3962,4215,3233,3353,3012,3085,2035,2164,1937,1795,3651,3574,3645,3193,1825,1990,2155,2565,3150,3940,3270,2930,3820,4380,4055,3870,3755,2045,2155,1825,2300,1945,3880,4060,4140,4295,3520,3425,3630,3525,4220,4165,4325,4335,1940,2740,2265,2755,2051,2075,1985,2190,2815,2600,2720,1985,1800,1985,2070,1800,3365,3735,3570,3535,3155,2965,2720,3430,3210,3380,3070,3620,3410,3425,3445,3205,4080,2155,2560,2300,2230,2515,2745,2855,2405,2830,3140,2795,3410,1990,2135,3245,2990,2890,3265,3360,3840,3725,3955,3830,4360,4054,3605,3940,1925,1975,1915,2670,3530,3900,3190,3420,2200,2150,2020,2130,2670,2595,2700,2556,2144,1968,2120,2019,2678,2870,3003,3381,2188,2711,2542,2434,2265,2110,2800,2110,2085,2335,2950,3250,1850,2145,1845,2910,2420,2500,2290,2490,2635,2620,2725,2385,1755,1875,1760,2065,1975,2050,1985,2215,2045,2380,2190,2210,2350,2615,2635,3230,3160,2900,2930,3415,3725,3060,3465,2605,2640,2395,2575,2525,2735,2865,1980,2025,1970,2125,2125,2160,2205,2245,1965,1965,1995,2945,3015,2585,2835,2665,2370,2950,2790,2130,2295,2625,2720],\"yr\":[70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82]},\"selected\":{\"id\":\"7d7b3400-2ebb-4d24-b2fd-ec8adad9fd5f\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"7ea02afc-1091-412a-a282-de31097d5d8f\",\"type\":\"UnionRenderers\"}},\"id\":\"d974326b-33fb-4552-84c2-6177e9453f85\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"field\":\"cyl\",\"units\":\"screen\"},\"x\":{\"field\":\"mpg\"},\"y\":{\"field\":\"displ\"}},\"id\":\"21c6e380-be49-4543-904a-cd03275d3334\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"8caaa54b-8cf7-48f0-b378-995837cdc9a8\",\"type\":\"LinearScale\"},{\"attributes\":{\"data_source\":{\"id\":\"d974326b-33fb-4552-84c2-6177e9453f85\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"8c72aeb2-0523-4b89-a151-386237977740\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"c5698705-9054-4b7f-896e-e5f1b2493e75\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"c2a956bb-7c75-44c6-84d1-b228560d0d83\",\"type\":\"CDSView\"}},\"id\":\"2e823c1e-4f2c-437c-b8e9-795610ec7354\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"fc997f8c-65d0-4946-b797-70aecafda14b\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"7055d611-7ffa-41d5-8073-8ffd5caee9fe\",\"type\":\"PanTool\"},{\"id\":\"bb251479-cd93-4715-b49a-1fb4d08036aa\",\"type\":\"WheelZoomTool\"},{\"id\":\"a432bd36-6556-4cc9-aa2a-9b95dac7b538\",\"type\":\"BoxZoomTool\"},{\"id\":\"70407e69-128d-4da0-a2a6-40289af24f5e\",\"type\":\"BoxSelectTool\"},{\"id\":\"e0e1c06e-c125-45b8-bf9c-9ad4f35247f2\",\"type\":\"LassoSelectTool\"}]},\"id\":\"188f6ae0-3bda-46b9-bcab-f1b9a57fa812\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"29aef531-4694-4067-8508-6ae30049a81e\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"aca98ba7-6222-4652-9682-956845fe66dc\",\"type\":\"LinearScale\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"fff0201a-09c1-4ebb-a738-716a20c9ed25\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"4c5e947f-7b93-4633-a72d-e917077268a2\",\"type\":\"LinearScale\"},{\"attributes\":{\"overlay\":{\"id\":\"fff0201a-09c1-4ebb-a738-716a20c9ed25\",\"type\":\"BoxAnnotation\"}},\"id\":\"a432bd36-6556-4cc9-aa2a-9b95dac7b538\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"49328a09-eab9-48eb-ad97-d1c61c9ae948\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"815ee431-91c4-4a81-a98a-2743d2e0364d\",\"type\":\"PanTool\"},{\"attributes\":{\"callback\":null},\"id\":\"725d9af6-a324-4627-8ec4-df02b38e5ba2\",\"type\":\"DataRange1d\"},{\"attributes\":{\"children\":[{\"id\":\"5ec13a8e-cbce-47cf-bc29-6af0b87685e2\",\"type\":\"Row\"}]},\"id\":\"5ca5d37a-32c6-4327-943a-4040d936d035\",\"type\":\"Column\"},{\"attributes\":{\"callback\":null,\"overlay\":{\"id\":\"4f72e8c0-f80b-463c-a6d1-67943de202f5\",\"type\":\"PolyAnnotation\"}},\"id\":\"1fde3b6a-4f8c-4fb1-8592-7c1127caf135\",\"type\":\"LassoSelectTool\"},{\"attributes\":{},\"id\":\"06792786-ab05-4c5e-b224-bb9d652e3f03\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null,\"overlay\":{\"id\":\"07653174-3d27-4cc5-a495-672ad6721b6e\",\"type\":\"BoxAnnotation\"}},\"id\":\"4df93f3b-5965-4df4-bb03-777f0190091b\",\"type\":\"BoxSelectTool\"},{\"attributes\":{},\"id\":\"07c613ba-492a-4f54-8412-a80b047da384\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null,\"overlay\":{\"id\":\"f340a58b-d49e-4592-b463-e40a6505ea7b\",\"type\":\"PolyAnnotation\"}},\"id\":\"e0e1c06e-c125-45b8-bf9c-9ad4f35247f2\",\"type\":\"LassoSelectTool\"},{\"attributes\":{},\"id\":\"1e047b99-b684-4e1a-aa06-5738ceb79607\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"536d57be-f9c9-44dc-825a-4d80b9b42a0e\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"eb2f0e7a-d367-4d03-a9ee-e0b01200a9eb\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"cfeb145f-52db-4ae5-9a2a-0ec0d4561415\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"d974326b-33fb-4552-84c2-6177e9453f85\",\"type\":\"ColumnDataSource\"}},\"id\":\"69d7b488-7878-44bf-b686-f828b2f69c15\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"46e47af1-f0b8-4b5c-8c9d-ef05aba18974\",\"type\":\"PanTool\"},{\"attributes\":{\"callback\":null,\"overlay\":{\"id\":\"ebd44b2c-d049-4f87-bfb9-61063bf56907\",\"type\":\"BoxAnnotation\"}},\"id\":\"70407e69-128d-4da0-a2a6-40289af24f5e\",\"type\":\"BoxSelectTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"ebd44b2c-d049-4f87-bfb9-61063bf56907\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"callback\":null},\"id\":\"fd0a6cfc-5f64-4903-90a9-0ac2a13fbbb1\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"7055d611-7ffa-41d5-8073-8ffd5caee9fe\",\"type\":\"PanTool\"},{\"attributes\":{\"formatter\":{\"id\":\"1e047b99-b684-4e1a-aa06-5738ceb79607\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"5b45f574-705b-4dbe-aa1c-b754111dbc88\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"d2bd386f-c6d9-4f30-afa1-0022dae3bdb6\",\"type\":\"BasicTicker\"}},\"id\":\"12582152-7b9c-4b13-9438-11955f25af4f\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"xs_units\":\"screen\",\"ys_units\":\"screen\"},\"id\":\"f340a58b-d49e-4592-b463-e40a6505ea7b\",\"type\":\"PolyAnnotation\"},{\"attributes\":{},\"id\":\"7ea02afc-1091-412a-a282-de31097d5d8f\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"below\":[{\"id\":\"2937c708-30bd-4325-9dd4-cd2a00ec7a1c\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"40befc8c-8064-4ae1-bd88-511ff3cb6dff\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"plot_width\":300,\"renderers\":[{\"id\":\"2937c708-30bd-4325-9dd4-cd2a00ec7a1c\",\"type\":\"LinearAxis\"},{\"id\":\"e2b43aec-7295-4ce1-99f0-c57bfc19d3ea\",\"type\":\"Grid\"},{\"id\":\"40befc8c-8064-4ae1-bd88-511ff3cb6dff\",\"type\":\"LinearAxis\"},{\"id\":\"a3ef9039-d5be-4058-95bc-a2f2d346218e\",\"type\":\"Grid\"},{\"id\":\"fff0201a-09c1-4ebb-a738-716a20c9ed25\",\"type\":\"BoxAnnotation\"},{\"id\":\"ebd44b2c-d049-4f87-bfb9-61063bf56907\",\"type\":\"BoxAnnotation\"},{\"id\":\"f340a58b-d49e-4592-b463-e40a6505ea7b\",\"type\":\"PolyAnnotation\"},{\"id\":\"2e823c1e-4f2c-437c-b8e9-795610ec7354\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"921437aa-2c25-42cd-bfda-f52597c02cc5\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"188f6ae0-3bda-46b9-bcab-f1b9a57fa812\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"725d9af6-a324-4627-8ec4-df02b38e5ba2\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"1ba0d6ea-29fd-423d-95f7-a4c8431e47f5\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"25c6b4ba-eb58-4714-9cc0-95175ed36ebf\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"1782d61c-8b69-4d37-bbfa-1d61c97b1fe7\",\"type\":\"LinearScale\"}},\"id\":\"3492d33f-6a3b-4723-ac3c-e81be9d5dbcb\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"yr\"},\"y\":{\"field\":\"mpg\"}},\"id\":\"00e94cb8-99c5-4345-95cc-31dcda019afc\",\"type\":\"Circle\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"815ee431-91c4-4a81-a98a-2743d2e0364d\",\"type\":\"PanTool\"},{\"id\":\"3a39e97d-41a1-4f95-9c74-6fa6613080bb\",\"type\":\"WheelZoomTool\"},{\"id\":\"50f4878c-0841-473a-b7a3-e5a8af0319e2\",\"type\":\"BoxZoomTool\"},{\"id\":\"23e320ad-9dd7-450c-9181-780842fbfffc\",\"type\":\"BoxSelectTool\"},{\"id\":\"eacfcb3f-8321-4ea9-93f6-707acc6dc073\",\"type\":\"LassoSelectTool\"}]},\"id\":\"97dc1320-8901-4f56-9f58-77937028c23b\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"c257bb12-da72-426d-953f-e5f517815c19\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null},\"id\":\"b51fc315-99c4-43d5-9125-8d97a12550b5\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null,\"overlay\":{\"id\":\"662ac094-01cf-48d8-bf22-7bfec7210826\",\"type\":\"PolyAnnotation\"}},\"id\":\"eacfcb3f-8321-4ea9-93f6-707acc6dc073\",\"type\":\"LassoSelectTool\"},{\"attributes\":{},\"id\":\"3a39e97d-41a1-4f95-9c74-6fa6613080bb\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null},\"id\":\"a3951156-7088-43d3-b550-5e113cc73ca1\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"hp\"},\"y\":{\"field\":\"displ\"}},\"id\":\"c5698705-9054-4b7f-896e-e5f1b2493e75\",\"type\":\"Circle\"},{\"attributes\":{\"overlay\":{\"id\":\"e98124fe-e8b3-4e19-9439-ed4a1aee5e3b\",\"type\":\"BoxAnnotation\"}},\"id\":\"5df2e44a-78e3-4a99-95dc-4d00680979bd\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"plot\":{\"id\":\"108a9df1-c7dc-4dd8-93f4-6ef11a764c62\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"a6316d45-4b2d-47eb-be52-6cd3ab84e396\",\"type\":\"BasicTicker\"}},\"id\":\"7c437abe-0069-4d6e-8454-2bf5a61780b2\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"d974326b-33fb-4552-84c2-6177e9453f85\",\"type\":\"ColumnDataSource\"}},\"id\":\"c2a956bb-7c75-44c6-84d1-b228560d0d83\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"d974326b-33fb-4552-84c2-6177e9453f85\",\"type\":\"ColumnDataSource\"}},\"id\":\"ed0e8b58-5d38-4492-9424-fe49a06d1978\",\"type\":\"CDSView\"}],\"root_ids\":[\"f45a8a50-7184-4c9f-a979-e5d77e1eecef\"]},\"title\":\"Bokeh Application\",\"version\":\"0.13.0\"}};\n", + " var render_items = [{\"docid\":\"ebe9aadd-28b2-446b-8080-884f2d424dfc\",\"roots\":{\"f45a8a50-7184-4c9f-a979-e5d77e1eecef\":\"e42df904-4250-4f64-a038-aa32c6fccee9\"}}];\n", + " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", + "\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " } else {\n", + " var attempts = 0;\n", + " var timer = setInterval(function(root) {\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " clearInterval(timer);\n", + " }\n", + " attempts++;\n", + " if (attempts > 100) {\n", + " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", + " clearInterval(timer);\n", + " }\n", + " }, 10, root)\n", + " }\n", + "})(window);" + ], + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "f45a8a50-7184-4c9f-a979-e5d77e1eecef" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "from bokeh.models import ColumnDataSource\n", + "from bokeh.layouts import gridplot\n", + "\n", + "source = ColumnDataSource(autompg)\n", + "\n", + "options = dict(plot_width=300, plot_height=300,\n", + " tools=\"pan,wheel_zoom,box_zoom,box_select,lasso_select\")\n", + "\n", + "p1 = figure(title=\"MPG by Year\", **options)\n", + "p1.circle(\"yr\", \"mpg\", color=\"blue\", source=source)\n", + "\n", + "p2 = figure(title=\"HP vs. Displacement\", **options)\n", + "p2.circle(\"hp\", \"displ\", color=\"green\", source=source)\n", + "\n", + "p3 = figure(title=\"MPG vs. Displacement\", **options)\n", + "p3.circle(\"mpg\", \"displ\", size=\"cyl\", line_color=\"red\", fill_color=None, source=source)\n", + "\n", + "p = gridplot([[ p1, p2, p3]], toolbar_location=\"right\")\n", + "\n", + "show(p)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can read more about the `ColumnDataSource` and other Bokeh data structures in [Providing Data for Plots and Tables](https://bokeh.pydata.org/en/latest/docs/user_guide/data.html)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Standalone HTML\n", + "\n", + "In addition to working well with the Notebook, Bokeh can also save plots out into their own HTML files. Here is the bar plot example from above, but saving into its own standalone file.\n", + "\n", + "Now when we call `show()`, a new browser tab is also opened with the plot. If we just wanted to save the file, we would use `save()` instead." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "(function(root) {\n", + " function embed_document(root) {\n", + " \n", + " var docs_json = {\"5427e26a-e4a6-41ff-906d-a3dc6a245c5a\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"50720095-76e4-4fcd-a2db-bbe8e833042a\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"bcbe9d6c-f342-4892-be26-c0bd9d8b1cb6\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2cc15dbc-ed1f-4da4-b745-af3261710014\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"35ab4b7e-a9e4-4d32-a40d-72aef8994e16\",\"type\":\"Selection\"},{\"attributes\":{\"data_source\":{\"id\":\"9fd95dff-4697-4785-a322-deb3e705dd9e\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"bdd7fa94-d58a-4294-9359-9de50f5f46d6\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"2cc15dbc-ed1f-4da4-b745-af3261710014\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"e9ae4b2a-ea53-4d2d-99d8-5aba0155b946\",\"type\":\"CDSView\"}},\"id\":\"c45d567b-5ea5-45b6-ba04-3ff122c4287f\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.3},\"fill_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.3},\"line_color\":{\"value\":\"red\"},\"size\":{\"units\":\"screen\",\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"bdd7fa94-d58a-4294-9359-9de50f5f46d6\",\"type\":\"Circle\"},{\"attributes\":{\"formatter\":{\"id\":\"01df2bd5-9c83-43bb-a1ea-2bf506779be0\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"71a19538-4460-4b13-b454-105dc614f5b1\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"667d7931-314d-4386-8a51-3645b0dc0657\",\"type\":\"BasicTicker\"}},\"id\":\"e9282805-efa2-49fb-9203-f024d2fe5b91\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"e33217de-57f8-4ba0-acf3-421c174eb996\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"fcd8509d-5b36-4c79-a35c-bee645cf7bd4\",\"type\":\"Triangle\"},{\"attributes\":{\"plot\":{\"id\":\"71a19538-4460-4b13-b454-105dc614f5b1\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e33217de-57f8-4ba0-acf3-421c174eb996\",\"type\":\"BasicTicker\"}},\"id\":\"2939b445-ba12-4970-9ebc-6a6570b4ed3b\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"126600f1-31f2-4be0-a049-1093a43597b1\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"formatter\":{\"id\":\"bcbe9d6c-f342-4892-be26-c0bd9d8b1cb6\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"71a19538-4460-4b13-b454-105dc614f5b1\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e33217de-57f8-4ba0-acf3-421c174eb996\",\"type\":\"BasicTicker\"}},\"id\":\"8ceeafc1-aa96-4a43-8c03-3a1d051abab0\",\"type\":\"LinearAxis\"},{\"attributes\":{\"items\":[{\"id\":\"a538257c-560a-43c0-9411-f31e156f3a7d\",\"type\":\"LegendItem\"},{\"id\":\"e3da4bc3-3c63-48c3-873f-3261fbc8d4da\",\"type\":\"LegendItem\"},{\"id\":\"e342940a-2687-4f8f-80d5-b7aa45b4ee25\",\"type\":\"LegendItem\"}],\"location\":\"top_left\",\"plot\":{\"id\":\"71a19538-4460-4b13-b454-105dc614f5b1\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"ddd264a6-3661-4200-be79-29f5bba52c14\",\"type\":\"Legend\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":[70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,80,80,80,80,80,80,81,81,81,81,81,81,81,81,81,81,81,81,81,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82],\"y\":{\"__ndarray__\":\"AAAAAAAAMkAAAAAAAAAuQAAAAAAAADJAAAAAAAAAMEAAAAAAAAAxQAAAAAAAAC5AAAAAAAAALEAAAAAAAAAsQAAAAAAAACxAAAAAAAAALkAAAAAAAAAuQAAAAAAAACxAAAAAAAAALkAAAAAAAAAsQAAAAAAAADZAAAAAAAAAMkAAAAAAAAA1QAAAAAAAADVAAAAAAAAAJEAAAAAAAAAkQAAAAAAAACZAAAAAAAAAIkAAAAAAAAA8QAAAAAAAADNAAAAAAAAAMEAAAAAAAAAxQAAAAAAAADNAAAAAAAAAMkAAAAAAAAAsQAAAAAAAACxAAAAAAAAALEAAAAAAAAAsQAAAAAAAAChAAAAAAAAAKkAAAAAAAAAqQAAAAAAAADJAAAAAAAAANkAAAAAAAAAzQAAAAAAAADJAAAAAAAAAN0AAAAAAAAA6QAAAAAAAADlAAAAAAAAANEAAAAAAAAA1QAAAAAAAACpAAAAAAAAALEAAAAAAAAAuQAAAAAAAACxAAAAAAAAAMUAAAAAAAAAmQAAAAAAAACpAAAAAAAAAKEAAAAAAAAAqQAAAAAAAAC5AAAAAAAAAKkAAAAAAAAAqQAAAAAAAACxAAAAAAAAANkAAAAAAAAA8QAAAAAAAACpAAAAAAAAALEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAoQAAAAAAAACpAAAAAAAAAKkAAAAAAAAAsQAAAAAAAACpAAAAAAAAAKEAAAAAAAAAqQAAAAAAAADJAAAAAAAAAMEAAAAAAAAAyQAAAAAAAADJAAAAAAAAAN0AAAAAAAAAmQAAAAAAAAChAAAAAAAAAKkAAAAAAAAAoQAAAAAAAADJAAAAAAAAANUAAAAAAAAAzQAAAAAAAADVAAAAAAAAALkAAAAAAAAAwQAAAAAAAAC5AAAAAAAAAJkAAAAAAAAA0QAAAAAAAADNAAAAAAAAALkAAAAAAAAA6QAAAAAAAADlAAAAAAAAAMEAAAAAAAAAwQAAAAAAAADJAAAAAAAAAMEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALEAAAAAAAAAsQAAAAAAAADxAAAAAAAAAM0AAAAAAAAAyQAAAAAAAAC5AAAAAAAAALkAAAAAAAAAwQAAAAAAAAC5AAAAAAAAAMEAAAAAAAAAsQAAAAAAAADFAAAAAAAAAMEAAAAAAAAAuQAAAAAAAADJAAAAAAAAANUAAAAAAAAA0QAAAAAAAACpAAAAAAAAAN0AAAAAAAAA0QAAAAAAAADdAAAAAAAAAMkAAAAAAAAAzQAAAAAAAADlAAAAAAAAAOkAAAAAAAIAxQAAAAAAAADBAAAAAAAAAL0AAAAAAAAAtQAAAAAAAADZAAAAAAAAANkAAAAAAAAA4QAAAAAAAgDZAAAAAAAAAPUAAAAAAAIA4QAAAAAAAADRAAAAAAAAAMkAAAAAAAIAyQAAAAAAAgDFAAAAAAACAOkAAAAAAAAAqQAAAAAAAgDBAAAAAAAAAKkAAAAAAAAAqQAAAAAAAACpAAAAAAAAAPkAAAAAAAIA5QAAAAAAAgDFAAAAAAAAAMUAAAAAAAAAvQAAAAAAAAC5AAAAAAACAMUAAAAAAAIA0QAAAAAAAADNAAAAAAACAMkAAAAAAAAAwQAAAAAAAAC9AAAAAAAAAL0AAAAAAAAAwQAAAAAAAgDhAAAAAAACAOUAAAAAAAIA+QAAAAAAAwEBAzczMzMwMQkBmZmZmZuYzQGZmZmZmZjNAMzMzMzMzNEAzMzMzMzMzQAAAAAAAgDRAMzMzMzMzNECamZmZmRk5QAAAAAAAgDRAZmZmZmZmM0CamZmZmZk0QM3MzMzMzDRAmpmZmZmZMkCamZmZmRkyQDMzMzMzMzNAMzMzMzOzMUCamZmZmRkyQAAAAAAAgDFAAAAAAAAAPkBmZmZmZuY+QDMzMzMzMzdAzczMzMzMN0AAAAAAAIA1QM3MzMzMzDNAzczMzMxMNkAzMzMzMzM0QJqZmZmZmTRAAAAAAAAAMUCamZmZmZkxQAAAAAAAgDBAMzMzMzMzMkBmZmZmZuYwQAAAAAAAAC9AMzMzMzMzM0AAAAAAAIAyQJqZmZmZ2UFAZmZmZmZmO0AAAAAAAAA3QGZmZmZm5jdAmpmZmZkZQUAAAAAAAEBBQGZmZmZmZjxAzczMzMzMPEDNzMzMzMw6QAAAAAAAwEBAzczMzMwMQEAAAAAAAAA8QGZmZmZmZjpAzczMzMxMOECamZmZmRkzQGZmZmZm5jtAMzMzMzMzO0CamZmZmZk6QM3MzMzMzDlAAAAAAACAN0AAAAAAAAA+QAAAAAAAgENAmpmZmZlZQUAzMzMzMzNBQGZmZmZm5j1AZmZmZmZmNkCamZmZmZk6QDMzMzMzMzRAmpmZmZmZMUAAAAAAAAA8QAAAAAAAADtAAAAAAAAAQUAAAAAAAAA/QAAAAAAAAD1AAAAAAAAAO0AAAAAAAAA4QAAAAAAAAENAAAAAAAAAQkAAAAAAAAA5QAAAAAAAAENAAAAAAAAAOkAAAAAAAAA2QAAAAAAAAEJAAAAAAAAAO0AAAAAAAAA7QAAAAAAAAEBAAAAAAAAAPEAAAAAAAAA/QA==\",\"dtype\":\"float64\",\"shape\":[245]}},\"selected\":{\"id\":\"f0529a2a-708e-4a56-9297-3694de8a3a1d\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"e053a031-0a38-4a61-9030-f96b24ca4963\",\"type\":\"UnionRenderers\"}},\"id\":\"e4eeaf41-a25c-4b06-905a-d653b7dfad52\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"cbae3a65-84c3-4950-9945-9ec0b6603ef5\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.3},\"fill_color\":{\"value\":\"blue\"},\"line_alpha\":{\"value\":0.3},\"line_color\":{\"value\":\"blue\"},\"size\":{\"units\":\"screen\",\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4f8dfcae-db23-42b6-8fae-32707653e16b\",\"type\":\"Triangle\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"0f46d072-693f-4133-8bf2-e1a46cb19cc5\",\"type\":\"PanTool\"},{\"id\":\"1da0aa3e-a998-4dc5-8285-2a56de67bf7e\",\"type\":\"WheelZoomTool\"},{\"id\":\"43000ba9-d331-48a7-89a9-562b39bb01a4\",\"type\":\"BoxZoomTool\"},{\"id\":\"e9280116-49c5-4a17-ae34-c4390b37fa93\",\"type\":\"SaveTool\"},{\"id\":\"77fda508-6267-4f67-8af7-c1305356a905\",\"type\":\"ResetTool\"},{\"id\":\"a2e39225-ab78-4d15-a416-e7fe9272c804\",\"type\":\"HelpTool\"}]},\"id\":\"153e7907-62d1-4dfa-aeab-108468ee1867\",\"type\":\"Toolbar\"},{\"attributes\":{\"data_source\":{\"id\":\"e4eeaf41-a25c-4b06-905a-d653b7dfad52\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"4f8dfcae-db23-42b6-8fae-32707653e16b\",\"type\":\"Triangle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"fcd8509d-5b36-4c79-a35c-bee645cf7bd4\",\"type\":\"Triangle\"},\"selection_glyph\":null,\"view\":{\"id\":\"18f09358-0616-44de-9547-7f13de100705\",\"type\":\"CDSView\"}},\"id\":\"c31d1647-0065-403a-86d2-c6fd84319546\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data_source\":{\"id\":\"62e11c3c-bd8d-49d2-b2c5-b22cd11f48b5\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"dc81abb5-6e19-4e9d-b618-c99b1d2e75b5\",\"type\":\"VBar\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5926eab8-ab12-438e-a458-cc75452e3b2c\",\"type\":\"VBar\"},\"selection_glyph\":null,\"view\":{\"id\":\"735ada3a-25fe-4925-8767-df1231597423\",\"type\":\"CDSView\"}},\"id\":\"32ec3271-9e08-4469-a4da-de79d584d673\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"data\":{\"bottom\":{\"__ndarray__\":\"gvFgx2qzKECcKci59t4sQJZdRzm5jipAzvVtn6zMKECki7kXNjswQIpnc6D2pi5ApAV4qVNeL0DtFQi6+rIwQBxLQL6+KTFAWBwW2YNMMkBnDzEy+Oo6QAq856zmjDhAfzfsSXnEOkA=\",\"dtype\":\"float64\",\"shape\":[13]},\"top\":{\"__ndarray__\":\"55jlF2UHN0DAzlQxaMk7QBEIyj5aJjhATTh849zMNUD6TNCFok49QMPUTjgNNTlA1KLp0Ht2O0AT6vdFBQ0+QNr+XjaL9T5AVt48aCfjP0AojYptQ1hEQPSsO6IX6UFAQOQJW8OdQkA=\",\"dtype\":\"float64\",\"shape\":[13]},\"x\":[70,71,72,73,74,75,76,77,78,79,80,81,82]},\"selected\":{\"id\":\"35ab4b7e-a9e4-4d32-a40d-72aef8994e16\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"126600f1-31f2-4be0-a049-1093a43597b1\",\"type\":\"UnionRenderers\"}},\"id\":\"62e11c3c-bd8d-49d2-b2c5-b22cd11f48b5\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"9fd95dff-4697-4785-a322-deb3e705dd9e\",\"type\":\"ColumnDataSource\"}},\"id\":\"e9ae4b2a-ea53-4d2d-99d8-5aba0155b946\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"77fda508-6267-4f67-8af7-c1305356a905\",\"type\":\"ResetTool\"},{\"attributes\":{\"callback\":null},\"id\":\"078018d3-ba04-4202-a4fc-c8890222abf4\",\"type\":\"DataRange1d\"},{\"attributes\":{\"label\":{\"value\":\"MPG 1 stddev\"},\"renderers\":[{\"id\":\"32ec3271-9e08-4469-a4da-de79d584d673\",\"type\":\"GlyphRenderer\"}]},\"id\":\"a538257c-560a-43c0-9411-f31e156f3a7d\",\"type\":\"LegendItem\"},{\"attributes\":{\"plot\":null,\"text\":\"MPG by Year (Japan and US)\"},\"id\":\"c9d1dfb7-2138-4ddf-8d9b-76ab35a8e67a\",\"type\":\"Title\"},{\"attributes\":{\"label\":{\"value\":\"Japanese\"},\"renderers\":[{\"id\":\"c45d567b-5ea5-45b6-ba04-3ff122c4287f\",\"type\":\"GlyphRenderer\"}]},\"id\":\"e3da4bc3-3c63-48c3-873f-3261fbc8d4da\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"a2e39225-ab78-4d15-a416-e7fe9272c804\",\"type\":\"HelpTool\"},{\"attributes\":{\"bottom\":{\"field\":\"bottom\"},\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":null},\"top\":{\"field\":\"top\"},\"width\":{\"value\":0.8},\"x\":{\"field\":\"x\"}},\"id\":\"dc81abb5-6e19-4e9d-b618-c99b1d2e75b5\",\"type\":\"VBar\"},{\"attributes\":{},\"id\":\"9d73b9a0-4404-4282-b4a0-27a97c54462a\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"e9280116-49c5-4a17-ae34-c4390b37fa93\",\"type\":\"SaveTool\"},{\"attributes\":{\"callback\":null},\"id\":\"ae9e23f3-3b99-4e5d-8c8c-181dd8d6bd46\",\"type\":\"DataRange1d\"},{\"attributes\":{\"overlay\":{\"id\":\"55ace5d7-8b62-4c93-9548-1a73779dc98e\",\"type\":\"BoxAnnotation\"}},\"id\":\"43000ba9-d331-48a7-89a9-562b39bb01a4\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"f0529a2a-708e-4a56-9297-3694de8a3a1d\",\"type\":\"Selection\"},{\"attributes\":{\"below\":[{\"id\":\"8ceeafc1-aa96-4a43-8c03-3a1d051abab0\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"e9282805-efa2-49fb-9203-f024d2fe5b91\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"8ceeafc1-aa96-4a43-8c03-3a1d051abab0\",\"type\":\"LinearAxis\"},{\"id\":\"2939b445-ba12-4970-9ebc-6a6570b4ed3b\",\"type\":\"Grid\"},{\"id\":\"e9282805-efa2-49fb-9203-f024d2fe5b91\",\"type\":\"LinearAxis\"},{\"id\":\"15532099-0176-4614-a98e-469a5b3dd6ef\",\"type\":\"Grid\"},{\"id\":\"55ace5d7-8b62-4c93-9548-1a73779dc98e\",\"type\":\"BoxAnnotation\"},{\"id\":\"ddd264a6-3661-4200-be79-29f5bba52c14\",\"type\":\"Legend\"},{\"id\":\"32ec3271-9e08-4469-a4da-de79d584d673\",\"type\":\"GlyphRenderer\"},{\"id\":\"c45d567b-5ea5-45b6-ba04-3ff122c4287f\",\"type\":\"GlyphRenderer\"},{\"id\":\"c31d1647-0065-403a-86d2-c6fd84319546\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"c9d1dfb7-2138-4ddf-8d9b-76ab35a8e67a\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"153e7907-62d1-4dfa-aeab-108468ee1867\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"ae9e23f3-3b99-4e5d-8c8c-181dd8d6bd46\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"50720095-76e4-4fcd-a2db-bbe8e833042a\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"078018d3-ba04-4202-a4fc-c8890222abf4\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"cbae3a65-84c3-4950-9945-9ec0b6603ef5\",\"type\":\"LinearScale\"}},\"id\":\"71a19538-4460-4b13-b454-105dc614f5b1\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"01df2bd5-9c83-43bb-a1ea-2bf506779be0\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":[70,70,71,71,71,71,72,72,72,72,72,73,73,73,73,74,74,74,74,74,74,75,75,75,75,76,76,76,76,77,77,77,77,77,77,78,78,78,78,78,78,78,78,79,79,80,80,80,80,80,80,80,80,80,80,80,80,80,81,81,81,81,81,81,81,81,81,81,81,81,82,82,82,82,82,82,82,82,82],\"y\":{\"__ndarray__\":\"AAAAAAAAOEAAAAAAAAA7QAAAAAAAADtAAAAAAAAAOUAAAAAAAAA/QAAAAAAAgEFAAAAAAAAAOEAAAAAAAAAzQAAAAAAAADxAAAAAAAAAN0AAAAAAAAA7QAAAAAAAADRAAAAAAAAANkAAAAAAAAAyQAAAAAAAADRAAAAAAAAAP0AAAAAAAABAQAAAAAAAAD9AAAAAAAAAQEAAAAAAAAA4QAAAAAAAADpAAAAAAAAAPUAAAAAAAAA4QAAAAAAAADhAAAAAAACAQEAAAAAAAIBAQAAAAAAAAEBAAAAAAAAAPEAAAAAAAAAzQAAAAAAAgD9AAAAAAADAQEAAAAAAAAA6QAAAAAAAAD5AAAAAAAAANkAAAAAAAIA1QGZmZmZmZkBAMzMzMzOzQ0DNzMzMzAxCQAAAAAAAgDtAMzMzMzMzO0CamZmZmRk1QGZmZmZm5jdAAAAAAACAPUDNzMzMzAxBQM3MzMzMzD9AzczMzMwMQ0CamZmZmZlCQM3MzMzMzD1AzczMzMxMP0AAAAAAAIBCQJqZmZmZGUBAzczMzMxMR0BmZmZmZmZEQM3MzMzMTEZAZmZmZmbmQECamZmZmVlAQDMzMzMzszdAMzMzMzMzQEDNzMzMzIxDQM3MzMzMjEFAZmZmZmYmQEAAAAAAAIBCQJqZmZmZ2UJAzczMzMwMQUCamZmZmdlAQDMzMzMzM0BAMzMzMzNzQECamZmZmZk/QGZmZmZmZjlAMzMzMzMzOEAAAAAAAIBCQAAAAAAAAD9AAAAAAAAAQkAAAAAAAABCQAAAAAAAAEFAAAAAAAAAQ0AAAAAAAABAQAAAAAAAAENAAAAAAAAAQEA=\",\"dtype\":\"float64\",\"shape\":[79]}},\"selected\":{\"id\":\"9d73b9a0-4404-4282-b4a0-27a97c54462a\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"4a166713-e296-41f6-a80b-5d6a1074d38b\",\"type\":\"UnionRenderers\"}},\"id\":\"9fd95dff-4697-4785-a322-deb3e705dd9e\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"55ace5d7-8b62-4c93-9548-1a73779dc98e\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"e053a031-0a38-4a61-9030-f96b24ca4963\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4a166713-e296-41f6-a80b-5d6a1074d38b\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"62e11c3c-bd8d-49d2-b2c5-b22cd11f48b5\",\"type\":\"ColumnDataSource\"}},\"id\":\"735ada3a-25fe-4925-8767-df1231597423\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"e4eeaf41-a25c-4b06-905a-d653b7dfad52\",\"type\":\"ColumnDataSource\"}},\"id\":\"18f09358-0616-44de-9547-7f13de100705\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1da0aa3e-a998-4dc5-8285-2a56de67bf7e\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"71a19538-4460-4b13-b454-105dc614f5b1\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"667d7931-314d-4386-8a51-3645b0dc0657\",\"type\":\"BasicTicker\"}},\"id\":\"15532099-0176-4614-a98e-469a5b3dd6ef\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"667d7931-314d-4386-8a51-3645b0dc0657\",\"type\":\"BasicTicker\"},{\"attributes\":{\"label\":{\"value\":\"American\"},\"renderers\":[{\"id\":\"c31d1647-0065-403a-86d2-c6fd84319546\",\"type\":\"GlyphRenderer\"}]},\"id\":\"e342940a-2687-4f8f-80d5-b7aa45b4ee25\",\"type\":\"LegendItem\"},{\"attributes\":{\"bottom\":{\"field\":\"bottom\"},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"field\":\"top\"},\"width\":{\"value\":0.8},\"x\":{\"field\":\"x\"}},\"id\":\"5926eab8-ab12-438e-a458-cc75452e3b2c\",\"type\":\"VBar\"},{\"attributes\":{},\"id\":\"0f46d072-693f-4133-8bf2-e1a46cb19cc5\",\"type\":\"PanTool\"}],\"root_ids\":[\"71a19538-4460-4b13-b454-105dc614f5b1\"]},\"title\":\"Bokeh Application\",\"version\":\"0.13.0\"}};\n", + " var render_items = [{\"docid\":\"5427e26a-e4a6-41ff-906d-a3dc6a245c5a\",\"roots\":{\"71a19538-4460-4b13-b454-105dc614f5b1\":\"a3fbb3bd-5e38-4110-bb97-3dccf780acf7\"}}];\n", + " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", + "\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " } else {\n", + " var attempts = 0;\n", + " var timer = setInterval(function(root) {\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " clearInterval(timer);\n", + " }\n", + " attempts++;\n", + " if (attempts > 100) {\n", + " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", + " clearInterval(timer);\n", + " }\n", + " }, 10, root)\n", + " }\n", + "})(window);" + ], + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "71a19538-4460-4b13-b454-105dc614f5b1" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "from bokeh.plotting import output_file\n", + "\n", + "output_file(\"barplot.html\")\n", + "\n", + "p = figure(title=\"MPG by Year (Japan and US)\")\n", + "\n", + "p.vbar(x=years, bottom=avg-std, top=avg+std, width=0.8, \n", + " fill_alpha=0.2, line_color=None, legend=\"MPG 1 stddev\")\n", + "\n", + "p.circle(x=japanese[\"yr\"], y=japanese[\"mpg\"], size=10, alpha=0.3,\n", + " color=\"red\", legend=\"Japanese\")\n", + "\n", + "p.triangle(x=american[\"yr\"], y=american[\"mpg\"], size=10, alpha=0.3,\n", + " color=\"blue\", legend=\"American\")\n", + "\n", + "p.legend.location = \"top_left\"\n", + "show(p)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bokeh Applications\n", + "\n", + "Bokeh also has a server component that can be used to build interactive web applications that easily connect the powerful constellation of PyData tools to sophisticated Bokeh visualizations. The Bokeh server can be used to:\n", + "\n", + "* respond to UI and tool events generated in a browser with computations or queries using the full power of python\n", + "* automatically push server-side updates to the UI (i.e. widgets or plots in a browser)\n", + "* use periodic, timeout, and asynchronous callbacks to drive streaming updates\n", + "\n", + "The cell below shows a simple deployed Bokeh application from https://demo.bokehplots.com embedded in an IFrame. Scrub the sliders or change the title to see the plot update. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import IFrame\n", + "IFrame('https://demo.bokehplots.com/apps/sliders/', width=900, height=410)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Click on any of the thumbnails below to launch other live Bokeh applications.\n", + "\n", + "
\n", + "\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "\n", + "
\n", + "\n", + "Find more details and information about developing and deploying Bokeh server applications in the User's Guide chapter [Running a Bokeh Server](https://bokeh.pydata.org/en/latest/docs/user_guide/server.html)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## BokehJS\n", + "\n", + "At its core, Bokeh consists of a Javascript library, [BokehJS](https://github.com/bokeh/bokeh/tree/master/bokehjs), and a Python binding which provides classes and objects that ultimately generate a JSON representation of the plot structure.\n", + "\n", + "You can read more about design and usage in the [Developing with JavaScript](https://bokeh.pydata.org/en/latest/docs/user_guide/bokehjs.html) section of the Bokeh User's Guide." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## More Information\n", + "\n", + "Find more details and information at the resources listed below:\n", + "\n", + "*Documentation:* https://bokeh.pydata.org/en/latest\n", + "\n", + "*GitHub:* https://github.com/bokeh/bokeh\n", + "\n", + "*Mailing list:* [bokeh@anaconda.com](mailto:bokeh@anaconda.com)\n", + "\n", + "*Gitter Chat:* https://gitter.im/bokeh/bokeh\n", + "\n", + "Be sure to follow us on Twitter [@bokehplots](http://twitter.com/BokehPlots>) and on [Youtube](https://www.youtube.com/c/Bokehplots)!\n", + "\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/0_numpy_matplotlib_scipy_sympy/example.png b/1_numpy_matplotlib_scipy_sympy/example.png similarity index 100% rename from 0_numpy_matplotlib_scipy_sympy/example.png rename to 1_numpy_matplotlib_scipy_sympy/example.png diff --git a/0_numpy_matplotlib_scipy_sympy/ipython_notebook.ipynb b/1_numpy_matplotlib_scipy_sympy/ipython_notebook.ipynb similarity index 100% rename from 0_numpy_matplotlib_scipy_sympy/ipython_notebook.ipynb rename to 1_numpy_matplotlib_scipy_sympy/ipython_notebook.ipynb diff --git a/0_numpy_matplotlib_scipy_sympy/matplotlib_ani.ipynb b/1_numpy_matplotlib_scipy_sympy/matplotlib_ani.ipynb similarity index 100% rename from 0_numpy_matplotlib_scipy_sympy/matplotlib_ani.ipynb rename to 1_numpy_matplotlib_scipy_sympy/matplotlib_ani.ipynb diff --git a/0_numpy_matplotlib_scipy_sympy/matplotlib_ani.py b/1_numpy_matplotlib_scipy_sympy/matplotlib_ani.py similarity index 100% rename from 0_numpy_matplotlib_scipy_sympy/matplotlib_ani.py rename to 1_numpy_matplotlib_scipy_sympy/matplotlib_ani.py diff --git a/0_numpy_matplotlib_scipy_sympy/matplotlib_full.ipynb b/1_numpy_matplotlib_scipy_sympy/matplotlib_full.ipynb similarity index 100% rename from 0_numpy_matplotlib_scipy_sympy/matplotlib_full.ipynb rename to 1_numpy_matplotlib_scipy_sympy/matplotlib_full.ipynb diff --git a/0_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.ipynb b/1_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.ipynb similarity index 100% rename from 0_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.ipynb rename to 1_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.ipynb diff --git a/0_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.py b/1_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.py similarity index 100% rename from 0_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.py rename to 1_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.py diff --git a/0_numpy_matplotlib_scipy_sympy/numpy_tutorial.ipynb b/1_numpy_matplotlib_scipy_sympy/numpy_tutorial.ipynb similarity index 100% rename from 0_numpy_matplotlib_scipy_sympy/numpy_tutorial.ipynb rename to 1_numpy_matplotlib_scipy_sympy/numpy_tutorial.ipynb diff --git a/0_numpy_matplotlib_scipy_sympy/scipy_tutorial.ipynb b/1_numpy_matplotlib_scipy_sympy/scipy_tutorial.ipynb similarity index 100% rename from 0_numpy_matplotlib_scipy_sympy/scipy_tutorial.ipynb rename to 1_numpy_matplotlib_scipy_sympy/scipy_tutorial.ipynb diff --git a/0_numpy_matplotlib_scipy_sympy/stockholm_td_adj.dat b/1_numpy_matplotlib_scipy_sympy/stockholm_td_adj.dat similarity index 100% rename from 0_numpy_matplotlib_scipy_sympy/stockholm_td_adj.dat rename to 1_numpy_matplotlib_scipy_sympy/stockholm_td_adj.dat diff --git a/0_numpy_matplotlib_scipy_sympy/sympy_tutorial.ipynb b/1_numpy_matplotlib_scipy_sympy/sympy_tutorial.ipynb similarity index 100% rename from 0_numpy_matplotlib_scipy_sympy/sympy_tutorial.ipynb rename to 1_numpy_matplotlib_scipy_sympy/sympy_tutorial.ipynb diff --git a/0_numpy_matplotlib_scipy_sympy/utils_git.ipynb b/1_numpy_matplotlib_scipy_sympy/utils_git.ipynb similarity index 100% rename from 0_numpy_matplotlib_scipy_sympy/utils_git.ipynb rename to 1_numpy_matplotlib_scipy_sympy/utils_git.ipynb diff --git a/0_numpy_matplotlib_scipy_sympy/utils_git_advanced.ipynb b/1_numpy_matplotlib_scipy_sympy/utils_git_advanced.ipynb similarity index 100% rename from 0_numpy_matplotlib_scipy_sympy/utils_git_advanced.ipynb rename to 1_numpy_matplotlib_scipy_sympy/utils_git_advanced.ipynb diff --git a/0_numpy_matplotlib_scipy_sympy/utils_shell.ipynb b/1_numpy_matplotlib_scipy_sympy/utils_shell.ipynb similarity index 100% rename from 0_numpy_matplotlib_scipy_sympy/utils_shell.ipynb rename to 1_numpy_matplotlib_scipy_sympy/utils_shell.ipynb diff --git a/1_knn/images/knn.png b/2_knn/images/knn.png similarity index 100% rename from 1_knn/images/knn.png rename to 2_knn/images/knn.png diff --git a/1_knn/knn_classification.ipynb b/2_knn/knn_classification.ipynb similarity index 100% rename from 1_knn/knn_classification.ipynb rename to 2_knn/knn_classification.ipynb diff --git a/1_knn/knn_classification.py b/2_knn/knn_classification.py similarity index 100% rename from 1_knn/knn_classification.py rename to 2_knn/knn_classification.py diff --git a/1_kmeans/ClusteringAlgorithms.ipynb b/3_kmeans/ClusteringAlgorithms.ipynb similarity index 100% rename from 1_kmeans/ClusteringAlgorithms.ipynb rename to 3_kmeans/ClusteringAlgorithms.ipynb diff --git a/1_kmeans/ClusteringAlgorithms.py b/3_kmeans/ClusteringAlgorithms.py similarity index 100% rename from 1_kmeans/ClusteringAlgorithms.py rename to 3_kmeans/ClusteringAlgorithms.py diff --git a/1_kmeans/README.md b/3_kmeans/README.md similarity index 100% rename from 1_kmeans/README.md rename to 3_kmeans/README.md diff --git a/1_kmeans/download_iris.py b/3_kmeans/download_iris.py similarity index 100% rename from 1_kmeans/download_iris.py rename to 3_kmeans/download_iris.py diff --git a/1_kmeans/images/ARI_ct.png b/3_kmeans/images/ARI_ct.png similarity index 100% rename from 1_kmeans/images/ARI_ct.png rename to 3_kmeans/images/ARI_ct.png diff --git a/1_kmeans/images/ARI_define.png b/3_kmeans/images/ARI_define.png similarity index 100% rename from 1_kmeans/images/ARI_define.png rename to 3_kmeans/images/ARI_define.png diff --git a/1_kmeans/images/data_0.png b/3_kmeans/images/data_0.png similarity index 100% rename from 1_kmeans/images/data_0.png rename to 3_kmeans/images/data_0.png diff --git a/1_kmeans/images/data_1.png b/3_kmeans/images/data_1.png similarity index 100% rename from 1_kmeans/images/data_1.png rename to 3_kmeans/images/data_1.png diff --git a/1_kmeans/images/data_2.png b/3_kmeans/images/data_2.png similarity index 100% rename from 1_kmeans/images/data_2.png rename to 3_kmeans/images/data_2.png diff --git a/1_kmeans/iris.csv b/3_kmeans/iris.csv similarity index 100% rename from 1_kmeans/iris.csv rename to 3_kmeans/iris.csv diff --git a/1_kmeans/k-means.ipynb b/3_kmeans/k-means.ipynb similarity index 100% rename from 1_kmeans/k-means.ipynb rename to 3_kmeans/k-means.ipynb diff --git a/1_kmeans/k-means.py b/3_kmeans/k-means.py similarity index 100% rename from 1_kmeans/k-means.py rename to 3_kmeans/k-means.py diff --git a/1_kmeans/kmeans-color-vq.ipynb b/3_kmeans/kmeans-color-vq.ipynb similarity index 100% rename from 1_kmeans/kmeans-color-vq.ipynb rename to 3_kmeans/kmeans-color-vq.ipynb diff --git a/1_logistic_regression/Least_squares.ipynb b/4_logistic_regression/Least_squares.ipynb similarity index 100% rename from 1_logistic_regression/Least_squares.ipynb rename to 4_logistic_regression/Least_squares.ipynb diff --git a/1_logistic_regression/Least_squares.py b/4_logistic_regression/Least_squares.py similarity index 100% rename from 1_logistic_regression/Least_squares.py rename to 4_logistic_regression/Least_squares.py diff --git a/1_logistic_regression/Logistic_regression.ipynb b/4_logistic_regression/Logistic_regression.ipynb similarity index 100% rename from 1_logistic_regression/Logistic_regression.ipynb rename to 4_logistic_regression/Logistic_regression.ipynb diff --git a/1_logistic_regression/Logistic_regression.py b/4_logistic_regression/Logistic_regression.py similarity index 100% rename from 1_logistic_regression/Logistic_regression.py rename to 4_logistic_regression/Logistic_regression.py diff --git a/1_logistic_regression/PCA_and_Logistic_Regression.ipynb b/4_logistic_regression/PCA_and_Logistic_Regression.ipynb similarity index 100% rename from 1_logistic_regression/PCA_and_Logistic_Regression.ipynb rename to 4_logistic_regression/PCA_and_Logistic_Regression.ipynb diff --git a/1_logistic_regression/PCA_and_Logistic_Regression.py b/4_logistic_regression/PCA_and_Logistic_Regression.py similarity index 100% rename from 1_logistic_regression/PCA_and_Logistic_Regression.py rename to 4_logistic_regression/PCA_and_Logistic_Regression.py diff --git a/1_logistic_regression/images/eq_logloss.png b/4_logistic_regression/images/eq_logloss.png similarity index 100% rename from 1_logistic_regression/images/eq_logloss.png rename to 4_logistic_regression/images/eq_logloss.png diff --git a/1_logistic_regression/images/eq_logloss_diff.png b/4_logistic_regression/images/eq_logloss_diff.png similarity index 100% rename from 1_logistic_regression/images/eq_logloss_diff.png rename to 4_logistic_regression/images/eq_logloss_diff.png diff --git a/1_logistic_regression/images/eq_loss.png b/4_logistic_regression/images/eq_loss.png similarity index 100% rename from 1_logistic_regression/images/eq_loss.png rename to 4_logistic_regression/images/eq_loss.png diff --git a/1_logistic_regression/images/fig1.gif b/4_logistic_regression/images/fig1.gif similarity index 100% rename from 1_logistic_regression/images/fig1.gif rename to 4_logistic_regression/images/fig1.gif diff --git a/1_logistic_regression/images/fig2.gif b/4_logistic_regression/images/fig2.gif similarity index 100% rename from 1_logistic_regression/images/fig2.gif rename to 4_logistic_regression/images/fig2.gif diff --git a/1_logistic_regression/images/fig3.gif b/4_logistic_regression/images/fig3.gif similarity index 100% rename from 1_logistic_regression/images/fig3.gif rename to 4_logistic_regression/images/fig3.gif diff --git a/1_logistic_regression/images/gd_stepsize.png b/4_logistic_regression/images/gd_stepsize.png similarity index 100% rename from 1_logistic_regression/images/gd_stepsize.png rename to 4_logistic_regression/images/gd_stepsize.png diff --git a/1_logistic_regression/images/gradient_descent.png b/4_logistic_regression/images/gradient_descent.png similarity index 100% rename from 1_logistic_regression/images/gradient_descent.png rename to 4_logistic_regression/images/gradient_descent.png diff --git a/1_nn/Perceptron.ipynb b/5_nn/Perceptron.ipynb similarity index 100% rename from 1_nn/Perceptron.ipynb rename to 5_nn/Perceptron.ipynb diff --git a/1_nn/Perceptron.py b/5_nn/Perceptron.py similarity index 100% rename from 1_nn/Perceptron.py rename to 5_nn/Perceptron.py diff --git a/1_nn/images/L_b.png b/5_nn/images/L_b.png similarity index 100% rename from 1_nn/images/L_b.png rename to 5_nn/images/L_b.png diff --git a/1_nn/images/L_w.png b/5_nn/images/L_w.png similarity index 100% rename from 1_nn/images/L_w.png rename to 5_nn/images/L_w.png diff --git a/1_nn/images/bp_loss.png b/5_nn/images/bp_loss.png similarity index 100% rename from 1_nn/images/bp_loss.png rename to 5_nn/images/bp_loss.png diff --git a/1_nn/images/bp_weight_update.png b/5_nn/images/bp_weight_update.png similarity index 100% rename from 1_nn/images/bp_weight_update.png rename to 5_nn/images/bp_weight_update.png diff --git a/1_nn/images/cross_entropy_loss.png b/5_nn/images/cross_entropy_loss.png similarity index 100% rename from 1_nn/images/cross_entropy_loss.png rename to 5_nn/images/cross_entropy_loss.png diff --git a/1_nn/images/eqn_13_16.png b/5_nn/images/eqn_13_16.png similarity index 100% rename from 1_nn/images/eqn_13_16.png rename to 5_nn/images/eqn_13_16.png diff --git a/1_nn/images/eqn_17_20.png b/5_nn/images/eqn_17_20.png similarity index 100% rename from 1_nn/images/eqn_17_20.png rename to 5_nn/images/eqn_17_20.png diff --git a/1_nn/images/eqn_21_22.png b/5_nn/images/eqn_21_22.png similarity index 100% rename from 1_nn/images/eqn_21_22.png rename to 5_nn/images/eqn_21_22.png diff --git a/1_nn/images/eqn_23_25.png b/5_nn/images/eqn_23_25.png similarity index 100% rename from 1_nn/images/eqn_23_25.png rename to 5_nn/images/eqn_23_25.png diff --git a/1_nn/images/eqn_26.png b/5_nn/images/eqn_26.png similarity index 100% rename from 1_nn/images/eqn_26.png rename to 5_nn/images/eqn_26.png diff --git a/1_nn/images/eqn_27_29.png b/5_nn/images/eqn_27_29.png similarity index 100% rename from 1_nn/images/eqn_27_29.png rename to 5_nn/images/eqn_27_29.png diff --git a/1_nn/images/eqn_30_31.png b/5_nn/images/eqn_30_31.png similarity index 100% rename from 1_nn/images/eqn_30_31.png rename to 5_nn/images/eqn_30_31.png diff --git a/1_nn/images/eqn_32_34.png b/5_nn/images/eqn_32_34.png similarity index 100% rename from 1_nn/images/eqn_32_34.png rename to 5_nn/images/eqn_32_34.png diff --git a/1_nn/images/eqn_35_40.png b/5_nn/images/eqn_35_40.png similarity index 100% rename from 1_nn/images/eqn_35_40.png rename to 5_nn/images/eqn_35_40.png diff --git a/1_nn/images/eqn_3_4.png b/5_nn/images/eqn_3_4.png similarity index 100% rename from 1_nn/images/eqn_3_4.png rename to 5_nn/images/eqn_3_4.png diff --git a/1_nn/images/eqn_5_6.png b/5_nn/images/eqn_5_6.png similarity index 100% rename from 1_nn/images/eqn_5_6.png rename to 5_nn/images/eqn_5_6.png diff --git a/1_nn/images/eqn_7_12.png b/5_nn/images/eqn_7_12.png similarity index 100% rename from 1_nn/images/eqn_7_12.png rename to 5_nn/images/eqn_7_12.png diff --git a/1_nn/images/eqn_delta_hidden.png b/5_nn/images/eqn_delta_hidden.png similarity index 100% rename from 1_nn/images/eqn_delta_hidden.png rename to 5_nn/images/eqn_delta_hidden.png diff --git a/1_nn/images/eqn_delta_j.png b/5_nn/images/eqn_delta_j.png similarity index 100% rename from 1_nn/images/eqn_delta_j.png rename to 5_nn/images/eqn_delta_j.png diff --git a/1_nn/images/eqn_ed_net_j.png b/5_nn/images/eqn_ed_net_j.png similarity index 100% rename from 1_nn/images/eqn_ed_net_j.png rename to 5_nn/images/eqn_ed_net_j.png diff --git a/1_nn/images/eqn_hidden_units.png b/5_nn/images/eqn_hidden_units.png similarity index 100% rename from 1_nn/images/eqn_hidden_units.png rename to 5_nn/images/eqn_hidden_units.png diff --git a/1_nn/images/eqn_matrix1.png b/5_nn/images/eqn_matrix1.png similarity index 100% rename from 1_nn/images/eqn_matrix1.png rename to 5_nn/images/eqn_matrix1.png diff --git a/1_nn/images/eqn_w41_update.png b/5_nn/images/eqn_w41_update.png similarity index 100% rename from 1_nn/images/eqn_w41_update.png rename to 5_nn/images/eqn_w41_update.png diff --git a/1_nn/images/eqn_w4b_update.png b/5_nn/images/eqn_w4b_update.png similarity index 100% rename from 1_nn/images/eqn_w4b_update.png rename to 5_nn/images/eqn_w4b_update.png diff --git a/1_nn/images/eqn_w84_update.png b/5_nn/images/eqn_w84_update.png similarity index 100% rename from 1_nn/images/eqn_w84_update.png rename to 5_nn/images/eqn_w84_update.png diff --git a/1_nn/images/formular_2.png b/5_nn/images/formular_2.png similarity index 100% rename from 1_nn/images/formular_2.png rename to 5_nn/images/formular_2.png diff --git a/1_nn/images/formular_3.png b/5_nn/images/formular_3.png similarity index 100% rename from 1_nn/images/formular_3.png rename to 5_nn/images/formular_3.png diff --git a/1_nn/images/formular_4.png b/5_nn/images/formular_4.png similarity index 100% rename from 1_nn/images/formular_4.png rename to 5_nn/images/formular_4.png diff --git a/1_nn/images/formular_5.png b/5_nn/images/formular_5.png similarity index 100% rename from 1_nn/images/formular_5.png rename to 5_nn/images/formular_5.png diff --git a/1_nn/images/forumlar_delta4.png b/5_nn/images/forumlar_delta4.png similarity index 100% rename from 1_nn/images/forumlar_delta4.png rename to 5_nn/images/forumlar_delta4.png diff --git a/1_nn/images/forumlar_delta8.png b/5_nn/images/forumlar_delta8.png similarity index 100% rename from 1_nn/images/forumlar_delta8.png rename to 5_nn/images/forumlar_delta8.png diff --git a/1_nn/images/neuron.gif b/5_nn/images/neuron.gif similarity index 100% rename from 1_nn/images/neuron.gif rename to 5_nn/images/neuron.gif diff --git a/1_nn/images/neuron.png b/5_nn/images/neuron.png similarity index 100% rename from 1_nn/images/neuron.png rename to 5_nn/images/neuron.png diff --git a/1_nn/images/nn1.jpeg b/5_nn/images/nn1.jpeg similarity index 100% rename from 1_nn/images/nn1.jpeg rename to 5_nn/images/nn1.jpeg diff --git a/1_nn/images/nn2.png b/5_nn/images/nn2.png similarity index 100% rename from 1_nn/images/nn2.png rename to 5_nn/images/nn2.png diff --git a/1_nn/images/nn3.png b/5_nn/images/nn3.png similarity index 100% rename from 1_nn/images/nn3.png rename to 5_nn/images/nn3.png diff --git a/1_nn/images/nn_parameters_demo.png b/5_nn/images/nn_parameters_demo.png similarity index 100% rename from 1_nn/images/nn_parameters_demo.png rename to 5_nn/images/nn_parameters_demo.png diff --git a/1_nn/images/perceptron_2.PNG b/5_nn/images/perceptron_2.PNG similarity index 100% rename from 1_nn/images/perceptron_2.PNG rename to 5_nn/images/perceptron_2.PNG diff --git a/1_nn/images/perceptron_geometry_def.png b/5_nn/images/perceptron_geometry_def.png similarity index 100% rename from 1_nn/images/perceptron_geometry_def.png rename to 5_nn/images/perceptron_geometry_def.png diff --git a/1_nn/images/sigmod.jpg b/5_nn/images/sigmod.jpg similarity index 100% rename from 1_nn/images/sigmod.jpg rename to 5_nn/images/sigmod.jpg diff --git a/1_nn/images/sign.png b/5_nn/images/sign.png similarity index 100% rename from 1_nn/images/sign.png rename to 5_nn/images/sign.png diff --git a/1_nn/images/softmax.png b/5_nn/images/softmax.png similarity index 100% rename from 1_nn/images/softmax.png rename to 5_nn/images/softmax.png diff --git a/1_nn/images/softmax_demo.png b/5_nn/images/softmax_demo.png similarity index 100% rename from 1_nn/images/softmax_demo.png rename to 5_nn/images/softmax_demo.png diff --git a/1_nn/images/softmax_neuron.png b/5_nn/images/softmax_neuron.png similarity index 100% rename from 1_nn/images/softmax_neuron.png rename to 5_nn/images/softmax_neuron.png diff --git a/1_nn/images/softmax_neuron_output2_eqn.png b/5_nn/images/softmax_neuron_output2_eqn.png similarity index 100% rename from 1_nn/images/softmax_neuron_output2_eqn.png rename to 5_nn/images/softmax_neuron_output2_eqn.png diff --git a/1_nn/images/softmax_neuron_output_eqn.png b/5_nn/images/softmax_neuron_output_eqn.png similarity index 100% rename from 1_nn/images/softmax_neuron_output_eqn.png rename to 5_nn/images/softmax_neuron_output_eqn.png diff --git a/1_nn/mlp_bp.ipynb b/5_nn/mlp_bp.ipynb similarity index 100% rename from 1_nn/mlp_bp.ipynb rename to 5_nn/mlp_bp.ipynb diff --git a/1_nn/mlp_bp.py b/5_nn/mlp_bp.py similarity index 100% rename from 1_nn/mlp_bp.py rename to 5_nn/mlp_bp.py diff --git a/1_nn/note.txt b/5_nn/note.txt similarity index 100% rename from 1_nn/note.txt rename to 5_nn/note.txt diff --git a/1_nn/softmax_ce.ipynb b/5_nn/softmax_ce.ipynb similarity index 100% rename from 1_nn/softmax_ce.ipynb rename to 5_nn/softmax_ce.ipynb diff --git a/1_nn/softmax_ce.py b/5_nn/softmax_ce.py similarity index 100% rename from 1_nn/softmax_ce.py rename to 5_nn/softmax_ce.py diff --git a/2_pytorch/0_basic/Tensor-and-Variable.ipynb b/6_pytorch/0_basic/Tensor-and-Variable.ipynb similarity index 100% rename from 2_pytorch/0_basic/Tensor-and-Variable.ipynb rename to 6_pytorch/0_basic/Tensor-and-Variable.ipynb diff --git a/2_pytorch/0_basic/autograd.ipynb b/6_pytorch/0_basic/autograd.ipynb similarity index 100% rename from 2_pytorch/0_basic/autograd.ipynb rename to 6_pytorch/0_basic/autograd.ipynb diff --git a/2_pytorch/0_basic/autograd.py b/6_pytorch/0_basic/autograd.py similarity index 100% rename from 2_pytorch/0_basic/autograd.py rename to 6_pytorch/0_basic/autograd.py diff --git a/2_pytorch/0_basic/dynamic-graph.ipynb b/6_pytorch/0_basic/dynamic-graph.ipynb similarity index 100% rename from 2_pytorch/0_basic/dynamic-graph.ipynb rename to 6_pytorch/0_basic/dynamic-graph.ipynb diff --git a/2_pytorch/0_basic/imgs/autograd_Variable.png b/6_pytorch/0_basic/imgs/autograd_Variable.png similarity index 100% rename from 2_pytorch/0_basic/imgs/autograd_Variable.png rename to 6_pytorch/0_basic/imgs/autograd_Variable.png diff --git a/2_pytorch/0_basic/imgs/autograd_Variable.svg b/6_pytorch/0_basic/imgs/autograd_Variable.svg similarity index 100% rename from 2_pytorch/0_basic/imgs/autograd_Variable.svg rename to 6_pytorch/0_basic/imgs/autograd_Variable.svg diff --git a/2_pytorch/0_basic/imgs/com_graph.svg b/6_pytorch/0_basic/imgs/com_graph.svg similarity index 100% rename from 2_pytorch/0_basic/imgs/com_graph.svg rename to 6_pytorch/0_basic/imgs/com_graph.svg diff --git a/2_pytorch/0_basic/imgs/com_graph_backward.svg b/6_pytorch/0_basic/imgs/com_graph_backward.svg similarity index 100% rename from 2_pytorch/0_basic/imgs/com_graph_backward.svg rename to 6_pytorch/0_basic/imgs/com_graph_backward.svg diff --git a/2_pytorch/0_basic/imgs/tensor_data_structure.svg b/6_pytorch/0_basic/imgs/tensor_data_structure.svg similarity index 100% rename from 2_pytorch/0_basic/imgs/tensor_data_structure.svg rename to 6_pytorch/0_basic/imgs/tensor_data_structure.svg diff --git a/2_pytorch/0_basic/ref_Autograd.ipynb b/6_pytorch/0_basic/ref_Autograd.ipynb similarity index 100% rename from 2_pytorch/0_basic/ref_Autograd.ipynb rename to 6_pytorch/0_basic/ref_Autograd.ipynb diff --git a/2_pytorch/0_basic/ref_Tensor.ipynb b/6_pytorch/0_basic/ref_Tensor.ipynb similarity index 100% rename from 2_pytorch/0_basic/ref_Tensor.ipynb rename to 6_pytorch/0_basic/ref_Tensor.ipynb diff --git a/2_pytorch/1_NN/bp.ipynb b/6_pytorch/1_NN/bp.ipynb similarity index 100% rename from 2_pytorch/1_NN/bp.ipynb rename to 6_pytorch/1_NN/bp.ipynb diff --git a/2_pytorch/1_NN/data.txt b/6_pytorch/1_NN/data.txt similarity index 100% rename from 2_pytorch/1_NN/data.txt rename to 6_pytorch/1_NN/data.txt diff --git a/2_pytorch/1_NN/deep-nn.ipynb b/6_pytorch/1_NN/deep-nn.ipynb similarity index 100% rename from 2_pytorch/1_NN/deep-nn.ipynb rename to 6_pytorch/1_NN/deep-nn.ipynb diff --git a/2_pytorch/1_NN/deep-nn.py b/6_pytorch/1_NN/deep-nn.py similarity index 100% rename from 2_pytorch/1_NN/deep-nn.py rename to 6_pytorch/1_NN/deep-nn.py diff --git a/2_pytorch/1_NN/imgs/ResNet.png b/6_pytorch/1_NN/imgs/ResNet.png similarity index 100% rename from 2_pytorch/1_NN/imgs/ResNet.png rename to 6_pytorch/1_NN/imgs/ResNet.png diff --git a/2_pytorch/1_NN/imgs/lena.png b/6_pytorch/1_NN/imgs/lena.png similarity index 100% rename from 2_pytorch/1_NN/imgs/lena.png rename to 6_pytorch/1_NN/imgs/lena.png diff --git a/2_pytorch/1_NN/imgs/lena3.png b/6_pytorch/1_NN/imgs/lena3.png similarity index 100% rename from 2_pytorch/1_NN/imgs/lena3.png rename to 6_pytorch/1_NN/imgs/lena3.png diff --git a/2_pytorch/1_NN/imgs/lena512.png b/6_pytorch/1_NN/imgs/lena512.png similarity index 100% rename from 2_pytorch/1_NN/imgs/lena512.png rename to 6_pytorch/1_NN/imgs/lena512.png diff --git a/2_pytorch/1_NN/imgs/multi_perceptron.png b/6_pytorch/1_NN/imgs/multi_perceptron.png similarity index 100% rename from 2_pytorch/1_NN/imgs/multi_perceptron.png rename to 6_pytorch/1_NN/imgs/multi_perceptron.png diff --git a/2_pytorch/1_NN/imgs/residual.png b/6_pytorch/1_NN/imgs/residual.png similarity index 100% rename from 2_pytorch/1_NN/imgs/residual.png rename to 6_pytorch/1_NN/imgs/residual.png diff --git a/2_pytorch/1_NN/imgs/resnet1.png b/6_pytorch/1_NN/imgs/resnet1.png similarity index 100% rename from 2_pytorch/1_NN/imgs/resnet1.png rename to 6_pytorch/1_NN/imgs/resnet1.png diff --git a/2_pytorch/1_NN/imgs/trans.bkp.PNG b/6_pytorch/1_NN/imgs/trans.bkp.PNG similarity index 100% rename from 2_pytorch/1_NN/imgs/trans.bkp.PNG rename to 6_pytorch/1_NN/imgs/trans.bkp.PNG diff --git a/2_pytorch/1_NN/linear-regression-gradient-descend.ipynb b/6_pytorch/1_NN/linear-regression-gradient-descend.ipynb similarity index 100% rename from 2_pytorch/1_NN/linear-regression-gradient-descend.ipynb rename to 6_pytorch/1_NN/linear-regression-gradient-descend.ipynb diff --git a/2_pytorch/1_NN/linear-regression-gradient-descend.py b/6_pytorch/1_NN/linear-regression-gradient-descend.py similarity index 100% rename from 2_pytorch/1_NN/linear-regression-gradient-descend.py rename to 6_pytorch/1_NN/linear-regression-gradient-descend.py diff --git a/2_pytorch/1_NN/logistic-regression.ipynb b/6_pytorch/1_NN/logistic-regression.ipynb similarity index 100% rename from 2_pytorch/1_NN/logistic-regression.ipynb rename to 6_pytorch/1_NN/logistic-regression.ipynb diff --git a/2_pytorch/1_NN/logistic-regression.py b/6_pytorch/1_NN/logistic-regression.py similarity index 100% rename from 2_pytorch/1_NN/logistic-regression.py rename to 6_pytorch/1_NN/logistic-regression.py diff --git a/2_pytorch/1_NN/nn-sequential-module.ipynb b/6_pytorch/1_NN/nn-sequential-module.ipynb similarity index 100% rename from 2_pytorch/1_NN/nn-sequential-module.ipynb rename to 6_pytorch/1_NN/nn-sequential-module.ipynb diff --git a/2_pytorch/1_NN/nn_summary.ipynb b/6_pytorch/1_NN/nn_summary.ipynb similarity index 100% rename from 2_pytorch/1_NN/nn_summary.ipynb rename to 6_pytorch/1_NN/nn_summary.ipynb diff --git a/2_pytorch/1_NN/optimizer/adadelta.ipynb b/6_pytorch/1_NN/optimizer/adadelta.ipynb similarity index 100% rename from 2_pytorch/1_NN/optimizer/adadelta.ipynb rename to 6_pytorch/1_NN/optimizer/adadelta.ipynb diff --git a/2_pytorch/1_NN/optimizer/adadelta.py b/6_pytorch/1_NN/optimizer/adadelta.py similarity index 100% rename from 2_pytorch/1_NN/optimizer/adadelta.py rename to 6_pytorch/1_NN/optimizer/adadelta.py diff --git a/2_pytorch/1_NN/optimizer/adagrad.ipynb b/6_pytorch/1_NN/optimizer/adagrad.ipynb similarity index 99% rename from 2_pytorch/1_NN/optimizer/adagrad.ipynb rename to 6_pytorch/1_NN/optimizer/adagrad.ipynb index 85bfd1a..0f22510 100644 --- a/2_pytorch/1_NN/optimizer/adagrad.ipynb +++ b/6_pytorch/1_NN/optimizer/adagrad.ipynb @@ -80,9 +80,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -141,9 +139,7 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -189,9 +185,7 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -242,9 +236,9 @@ ], "metadata": { "kernelspec": { - "display_name": "mx", + "display_name": "Python 3", "language": "python", - "name": "mx" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -256,7 +250,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.0" + "version": "3.5.2" } }, "nbformat": 4, diff --git a/2_pytorch/1_NN/optimizer/adam.ipynb b/6_pytorch/1_NN/optimizer/adam.ipynb similarity index 100% rename from 2_pytorch/1_NN/optimizer/adam.ipynb rename to 6_pytorch/1_NN/optimizer/adam.ipynb diff --git a/2_pytorch/1_NN/optimizer/adam.py b/6_pytorch/1_NN/optimizer/adam.py similarity index 100% rename from 2_pytorch/1_NN/optimizer/adam.py rename to 6_pytorch/1_NN/optimizer/adam.py diff --git a/2_pytorch/1_NN/optimizer/momentum.ipynb b/6_pytorch/1_NN/optimizer/momentum.ipynb similarity index 100% rename from 2_pytorch/1_NN/optimizer/momentum.ipynb rename to 6_pytorch/1_NN/optimizer/momentum.ipynb diff --git a/2_pytorch/1_NN/optimizer/momentum.py b/6_pytorch/1_NN/optimizer/momentum.py similarity index 100% rename from 2_pytorch/1_NN/optimizer/momentum.py rename to 6_pytorch/1_NN/optimizer/momentum.py diff --git a/2_pytorch/1_NN/optimizer/rmsprop.ipynb b/6_pytorch/1_NN/optimizer/rmsprop.ipynb similarity index 100% rename from 2_pytorch/1_NN/optimizer/rmsprop.ipynb rename to 6_pytorch/1_NN/optimizer/rmsprop.ipynb diff --git a/2_pytorch/1_NN/optimizer/rmsprop.py b/6_pytorch/1_NN/optimizer/rmsprop.py similarity index 100% rename from 2_pytorch/1_NN/optimizer/rmsprop.py rename to 6_pytorch/1_NN/optimizer/rmsprop.py diff --git a/2_pytorch/1_NN/optimizer/sgd.ipynb b/6_pytorch/1_NN/optimizer/sgd.ipynb similarity index 100% rename from 2_pytorch/1_NN/optimizer/sgd.ipynb rename to 6_pytorch/1_NN/optimizer/sgd.ipynb diff --git a/2_pytorch/1_NN/optimizer/sgd.py b/6_pytorch/1_NN/optimizer/sgd.py similarity index 100% rename from 2_pytorch/1_NN/optimizer/sgd.py rename to 6_pytorch/1_NN/optimizer/sgd.py diff --git a/2_pytorch/1_NN/param_initialize.ipynb b/6_pytorch/1_NN/param_initialize.ipynb similarity index 100% rename from 2_pytorch/1_NN/param_initialize.ipynb rename to 6_pytorch/1_NN/param_initialize.ipynb diff --git a/2_pytorch/2_CNN/basic_conv.ipynb b/6_pytorch/2_CNN/basic_conv.ipynb similarity index 100% rename from 2_pytorch/2_CNN/basic_conv.ipynb rename to 6_pytorch/2_CNN/basic_conv.ipynb diff --git a/2_pytorch/2_CNN/basic_conv.py b/6_pytorch/2_CNN/basic_conv.py similarity index 100% rename from 2_pytorch/2_CNN/basic_conv.py rename to 6_pytorch/2_CNN/basic_conv.py diff --git a/2_pytorch/2_CNN/batch-normalization.ipynb b/6_pytorch/2_CNN/batch-normalization.ipynb similarity index 100% rename from 2_pytorch/2_CNN/batch-normalization.ipynb rename to 6_pytorch/2_CNN/batch-normalization.ipynb diff --git a/2_pytorch/2_CNN/batch-normalization.py b/6_pytorch/2_CNN/batch-normalization.py similarity index 100% rename from 2_pytorch/2_CNN/batch-normalization.py rename to 6_pytorch/2_CNN/batch-normalization.py diff --git a/2_pytorch/2_CNN/cat.png b/6_pytorch/2_CNN/cat.png similarity index 100% rename from 2_pytorch/2_CNN/cat.png rename to 6_pytorch/2_CNN/cat.png diff --git a/2_pytorch/2_CNN/data-augumentation.ipynb b/6_pytorch/2_CNN/data-augumentation.ipynb similarity index 100% rename from 2_pytorch/2_CNN/data-augumentation.ipynb rename to 6_pytorch/2_CNN/data-augumentation.ipynb diff --git a/2_pytorch/2_CNN/data-augumentation.py b/6_pytorch/2_CNN/data-augumentation.py similarity index 100% rename from 2_pytorch/2_CNN/data-augumentation.py rename to 6_pytorch/2_CNN/data-augumentation.py diff --git a/2_pytorch/2_CNN/densenet.ipynb b/6_pytorch/2_CNN/densenet.ipynb similarity index 100% rename from 2_pytorch/2_CNN/densenet.ipynb rename to 6_pytorch/2_CNN/densenet.ipynb diff --git a/2_pytorch/2_CNN/densenet.py b/6_pytorch/2_CNN/densenet.py similarity index 100% rename from 2_pytorch/2_CNN/densenet.py rename to 6_pytorch/2_CNN/densenet.py diff --git a/2_pytorch/2_CNN/googlenet.ipynb b/6_pytorch/2_CNN/googlenet.ipynb similarity index 100% rename from 2_pytorch/2_CNN/googlenet.ipynb rename to 6_pytorch/2_CNN/googlenet.ipynb diff --git a/2_pytorch/2_CNN/googlenet.py b/6_pytorch/2_CNN/googlenet.py similarity index 100% rename from 2_pytorch/2_CNN/googlenet.py rename to 6_pytorch/2_CNN/googlenet.py diff --git a/2_pytorch/2_CNN/lr-decay.ipynb b/6_pytorch/2_CNN/lr-decay.ipynb similarity index 100% rename from 2_pytorch/2_CNN/lr-decay.ipynb rename to 6_pytorch/2_CNN/lr-decay.ipynb diff --git a/2_pytorch/2_CNN/lr-decay.py b/6_pytorch/2_CNN/lr-decay.py similarity index 100% rename from 2_pytorch/2_CNN/lr-decay.py rename to 6_pytorch/2_CNN/lr-decay.py diff --git a/2_pytorch/2_CNN/regularization.ipynb b/6_pytorch/2_CNN/regularization.ipynb similarity index 100% rename from 2_pytorch/2_CNN/regularization.ipynb rename to 6_pytorch/2_CNN/regularization.ipynb diff --git a/2_pytorch/2_CNN/regularization.py b/6_pytorch/2_CNN/regularization.py similarity index 100% rename from 2_pytorch/2_CNN/regularization.py rename to 6_pytorch/2_CNN/regularization.py diff --git a/2_pytorch/2_CNN/resnet.ipynb b/6_pytorch/2_CNN/resnet.ipynb similarity index 100% rename from 2_pytorch/2_CNN/resnet.ipynb rename to 6_pytorch/2_CNN/resnet.ipynb diff --git a/2_pytorch/2_CNN/resnet.py b/6_pytorch/2_CNN/resnet.py similarity index 100% rename from 2_pytorch/2_CNN/resnet.py rename to 6_pytorch/2_CNN/resnet.py diff --git a/2_pytorch/2_CNN/utils.py b/6_pytorch/2_CNN/utils.py similarity index 100% rename from 2_pytorch/2_CNN/utils.py rename to 6_pytorch/2_CNN/utils.py diff --git a/2_pytorch/2_CNN/vgg.ipynb b/6_pytorch/2_CNN/vgg.ipynb similarity index 100% rename from 2_pytorch/2_CNN/vgg.ipynb rename to 6_pytorch/2_CNN/vgg.ipynb diff --git a/2_pytorch/2_CNN/vgg.py b/6_pytorch/2_CNN/vgg.py similarity index 100% rename from 2_pytorch/2_CNN/vgg.py rename to 6_pytorch/2_CNN/vgg.py diff --git a/2_pytorch/3_RNN/nlp/n-gram.ipynb b/6_pytorch/3_RNN/nlp/n-gram.ipynb similarity index 100% rename from 2_pytorch/3_RNN/nlp/n-gram.ipynb rename to 6_pytorch/3_RNN/nlp/n-gram.ipynb diff --git a/2_pytorch/3_RNN/nlp/seq-lstm.ipynb b/6_pytorch/3_RNN/nlp/seq-lstm.ipynb similarity index 100% rename from 2_pytorch/3_RNN/nlp/seq-lstm.ipynb rename to 6_pytorch/3_RNN/nlp/seq-lstm.ipynb diff --git a/2_pytorch/3_RNN/nlp/word-embedding.ipynb b/6_pytorch/3_RNN/nlp/word-embedding.ipynb similarity index 100% rename from 2_pytorch/3_RNN/nlp/word-embedding.ipynb rename to 6_pytorch/3_RNN/nlp/word-embedding.ipynb diff --git a/2_pytorch/3_RNN/pytorch-rnn.ipynb b/6_pytorch/3_RNN/pytorch-rnn.ipynb similarity index 100% rename from 2_pytorch/3_RNN/pytorch-rnn.ipynb rename to 6_pytorch/3_RNN/pytorch-rnn.ipynb diff --git a/2_pytorch/3_RNN/rnn-for-image.ipynb b/6_pytorch/3_RNN/rnn-for-image.ipynb similarity index 100% rename from 2_pytorch/3_RNN/rnn-for-image.ipynb rename to 6_pytorch/3_RNN/rnn-for-image.ipynb diff --git a/2_pytorch/3_RNN/time-series/data.csv b/6_pytorch/3_RNN/time-series/data.csv similarity index 100% rename from 2_pytorch/3_RNN/time-series/data.csv rename to 6_pytorch/3_RNN/time-series/data.csv diff --git a/2_pytorch/3_RNN/time-series/lstm-time-series.ipynb b/6_pytorch/3_RNN/time-series/lstm-time-series.ipynb similarity index 100% rename from 2_pytorch/3_RNN/time-series/lstm-time-series.ipynb rename to 6_pytorch/3_RNN/time-series/lstm-time-series.ipynb diff --git a/2_pytorch/3_RNN/time-series/lstm-time-series.py b/6_pytorch/3_RNN/time-series/lstm-time-series.py similarity index 100% rename from 2_pytorch/3_RNN/time-series/lstm-time-series.py rename to 6_pytorch/3_RNN/time-series/lstm-time-series.py diff --git a/2_pytorch/3_RNN/utils.py b/6_pytorch/3_RNN/utils.py similarity index 100% rename from 2_pytorch/3_RNN/utils.py rename to 6_pytorch/3_RNN/utils.py diff --git a/2_pytorch/4_GAN/autoencoder.ipynb b/6_pytorch/4_GAN/autoencoder.ipynb similarity index 100% rename from 2_pytorch/4_GAN/autoencoder.ipynb rename to 6_pytorch/4_GAN/autoencoder.ipynb diff --git a/2_pytorch/4_GAN/autoencoder.py b/6_pytorch/4_GAN/autoencoder.py similarity index 100% rename from 2_pytorch/4_GAN/autoencoder.py rename to 6_pytorch/4_GAN/autoencoder.py diff --git a/2_pytorch/4_GAN/gan.ipynb b/6_pytorch/4_GAN/gan.ipynb similarity index 100% rename from 2_pytorch/4_GAN/gan.ipynb rename to 6_pytorch/4_GAN/gan.ipynb diff --git a/2_pytorch/4_GAN/gan.py b/6_pytorch/4_GAN/gan.py similarity index 100% rename from 2_pytorch/4_GAN/gan.py rename to 6_pytorch/4_GAN/gan.py diff --git a/2_pytorch/4_GAN/vae.ipynb b/6_pytorch/4_GAN/vae.ipynb similarity index 100% rename from 2_pytorch/4_GAN/vae.ipynb rename to 6_pytorch/4_GAN/vae.ipynb diff --git a/2_pytorch/4_GAN/vae.py b/6_pytorch/4_GAN/vae.py similarity index 100% rename from 2_pytorch/4_GAN/vae.py rename to 6_pytorch/4_GAN/vae.py diff --git a/6_pytorch/5_NLP/README.md b/6_pytorch/5_NLP/README.md new file mode 100644 index 0000000..647b656 --- /dev/null +++ b/6_pytorch/5_NLP/README.md @@ -0,0 +1,8 @@ + + +## References + +* [神经网络嵌入详解](https://mp.weixin.qq.com/s/9Azv6xOZuY0ntcQpiqLD-A) + +* [Neural Network Embeddings Explained](https://towardsdatascience.com/neural-network-embeddings-explained-4d028e6f0526) + diff --git a/2_pytorch/PyTorch_quick_intro.ipynb b/6_pytorch/PyTorch_quick_intro.ipynb similarity index 100% rename from 2_pytorch/PyTorch_quick_intro.ipynb rename to 6_pytorch/PyTorch_quick_intro.ipynb diff --git a/2_pytorch/README.md b/6_pytorch/README.md similarity index 100% rename from 2_pytorch/README.md rename to 6_pytorch/README.md diff --git a/2_pytorch/imgs/Ipython-auto.png b/6_pytorch/imgs/Ipython-auto.png similarity index 100% rename from 2_pytorch/imgs/Ipython-auto.png rename to 6_pytorch/imgs/Ipython-auto.png diff --git a/2_pytorch/imgs/Ipython-help.png b/6_pytorch/imgs/Ipython-help.png similarity index 100% rename from 2_pytorch/imgs/Ipython-help.png rename to 6_pytorch/imgs/Ipython-help.png diff --git a/2_pytorch/imgs/Jupyter主页面.png b/6_pytorch/imgs/Jupyter主页面.png similarity index 100% rename from 2_pytorch/imgs/Jupyter主页面.png rename to 6_pytorch/imgs/Jupyter主页面.png diff --git a/2_pytorch/imgs/Notebook主界面.png b/6_pytorch/imgs/Notebook主界面.png similarity index 100% rename from 2_pytorch/imgs/Notebook主界面.png rename to 6_pytorch/imgs/Notebook主界面.png diff --git a/2_pytorch/imgs/autograd_Variable.png b/6_pytorch/imgs/autograd_Variable.png similarity index 100% rename from 2_pytorch/imgs/autograd_Variable.png rename to 6_pytorch/imgs/autograd_Variable.png diff --git a/2_pytorch/imgs/autograd_Variable.svg b/6_pytorch/imgs/autograd_Variable.svg similarity index 100% rename from 2_pytorch/imgs/autograd_Variable.svg rename to 6_pytorch/imgs/autograd_Variable.svg diff --git a/2_pytorch/imgs/del/img1.png b/6_pytorch/imgs/del/img1.png similarity index 100% rename from 2_pytorch/imgs/del/img1.png rename to 6_pytorch/imgs/del/img1.png diff --git a/2_pytorch/imgs/del/img2.png b/6_pytorch/imgs/del/img2.png similarity index 100% rename from 2_pytorch/imgs/del/img2.png rename to 6_pytorch/imgs/del/img2.png diff --git a/2_pytorch/imgs/install-1.png b/6_pytorch/imgs/install-1.png similarity index 100% rename from 2_pytorch/imgs/install-1.png rename to 6_pytorch/imgs/install-1.png diff --git a/2_pytorch/imgs/install-2.png b/6_pytorch/imgs/install-2.png similarity index 100% rename from 2_pytorch/imgs/install-2.png rename to 6_pytorch/imgs/install-2.png diff --git a/2_pytorch/imgs/nn_lenet.png b/6_pytorch/imgs/nn_lenet.png similarity index 100% rename from 2_pytorch/imgs/nn_lenet.png rename to 6_pytorch/imgs/nn_lenet.png diff --git a/README.md b/README.md index 545ed1f..7455b00 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,15 @@ # Python与机器学习 -本教程包含了一些使用Python来学习机器学习的notebook,通过本教程的引导来快速得学习Python、Python的常用库、机器学习的理论知识与实际编程,并学习如何解决实际问题。 +本教程包含了一些使用Python来学习机器学习的notebook,通过本教程的引导来快速学习Python、Python的常用库、机器学习的理论知识与实际编程,并学习如何解决实际问题。 由于**本课程需要大量的编程练习才能取得比较好的学习效果**,因此需要认真把作业和报告完成,写作业的过程可以查阅网上的资料,但是不能直接照抄,需要自己独立思考并独立写出代码。 + + ## 内容 1. [Python](0_python/) + - [Install Python](tips/InstallPython.md) - [Introduction](0_python/0_Introduction.ipynb) - [Python Basics](0_python/1_Basics.ipynb) - [Print Statement](0_python/2_Print_Statement.ipynb) @@ -15,51 +18,52 @@ - [Control Flow](0_python/5_Control_Flow.ipynb) - [Function](0_python/6_Function.ipynb) - [Class](0_python/7_Class.ipynb) -2. [numpy & matplotlib](0_numpy_matplotlib_scipy_sympy/) - - [numpy](0_numpy_matplotlib_scipy_sympy/numpy_tutorial.ipynb) - - [matplotlib](0_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.ipynb) -3. [knn](1_knn/knn_classification.ipynb) -4. [kMenas](1_kmeans/knn_classification.ipynb) -5. [Logistic Regression](1_logistic_regression/) - - [Least squares](1_logistic_regression/Least_squares.ipynb) - - [Logistic regression](1_logistic_regression/Logistic_regression.ipynb) -6. [Neural Network](1_nn/) - - [Perceptron](1_nn/Perceptron.ipynb) - - [Multi-layer Perceptron & BP](1_nn/mlp_bp.ipynb) - - [Softmax & cross-entroy](1_nn/softmax_ce.ipynb) -7. [PyTorch](2_pytorch/) - - [short tutorial](2_pytorch/PyTorch_quick_intro.ipynb) - - [basic/Tensor-and-Variable](2_pytorch/0_basic/Tensor-and-Variable.ipynb) - - [basic/autograd](2_pytorch/0_basic/autograd.ipynb) - - [basic/dynamic-graph](2_pytorch/0_basic/dynamic-graph.ipynb) - - [nn/linear-regression-gradient-descend](2_pytorch/1_NN/linear-regression-gradient-descend.ipynb) - - [nn/logistic-regression](2_pytorch/1_NN/logistic-regression.ipynb) - - [nn/nn-sequential-module](2_pytorch/1_NN/nn-sequential-module.ipynb) - - [nn/bp](2_pytorch/1_NN/bp.ipynb) - - [nn/deep-nn](2_pytorch/1_NN/deep-nn.ipynb) - - [nn/param_initialize](2_pytorch/1_NN/param_initialize.ipynb) - - [optim/sgd](2_pytorch/1_NN/optimizer/sgd.ipynb) - - [optim/adam](2_pytorch/1_NN/optimizer/adam.ipynb) - - [cnn/basic_conv](2_pytorch/2_CNN/basic_conv.ipynb) - - [cnn/batch-normalization](2_pytorch/2_CNN/batch-normalization.ipynb) - - [cnn/regularization](2_pytorch/2_CNN/regularization.ipynb) - - [cnn/lr-decay](2_pytorch/2_CNN/lr-decay.ipynb) - - [cnn/vgg](2_pytorch/2_CNN/vgg.ipynb) - - [cnn/googlenet](2_pytorch/2_CNN/googlenet.ipynb) - - [cnn/densenet](2_pytorch/2_CNN/densenet.ipynb) - - [cnn/resnet](2_pytorch/2_CNN/resnet.ipynb) - - [rnn/pytorch-rnn](2_pytorch/3_RNN/pytorch-rnn.ipynb) - - [rnn/rnn-for-image](2_pytorch/3_RNN/rnn-for-image.ipynb) - - [rnn/lstm-time-series](2_pytorch/3_RNN/time-series/lstm-time-series.ipynb) - - [gan/autoencoder](2_pytorch/4_GNN/autoencoder.ipynb) - - [gan/vae](2_pytorch/4_GNN/vae.ipynb) - - [gan/gan](2_pytorch/4_GNN/gan.ipynb) +2. [numpy & matplotlib](1_numpy_matplotlib_scipy_sympy/) + - [numpy](1_numpy_matplotlib_scipy_sympy/numpy_tutorial.ipynb) + - [matplotlib](1_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.ipynb) +3. [knn](2_knn/knn_classification.ipynb) +4. [kMenas](3_kmeans/knn_classification.ipynb) +5. [Logistic Regression](4_logistic_regression/) + - [Least squares](4_logistic_regression/Least_squares.ipynb) + - [Logistic regression](4_logistic_regression/Logistic_regression.ipynb) +6. [Neural Network](5_nn/) + - [Perceptron](5_nn/Perceptron.ipynb) + - [Multi-layer Perceptron & BP](5_nn/mlp_bp.ipynb) + - [Softmax & cross-entroy](5_nn/softmax_ce.ipynb) +7. [PyTorch](6_pytorch/) + - [short tutorial](6_pytorch/PyTorch_quick_intro.ipynb) + - [basic/Tensor-and-Variable](6_pytorch/0_basic/Tensor-and-Variable.ipynb) + - [basic/autograd](6_pytorch/0_basic/autograd.ipynb) + - [basic/dynamic-graph](6_pytorch/0_basic/dynamic-graph.ipynb) + - [nn/linear-regression-gradient-descend](6_pytorch/1_NN/linear-regression-gradient-descend.ipynb) + - [nn/logistic-regression](6_pytorch/1_NN/logistic-regression.ipynb) + - [nn/nn-sequential-module](6_pytorch/1_NN/nn-sequential-module.ipynb) + - [nn/bp](6_pytorch/1_NN/bp.ipynb) + - [nn/deep-nn](6_pytorch/1_NN/deep-nn.ipynb) + - [nn/param_initialize](6_pytorch/1_NN/param_initialize.ipynb) + - [optim/sgd](6_pytorch/1_NN/optimizer/sgd.ipynb) + - [optim/adam](6_pytorch/1_NN/optimizer/adam.ipynb) + - [cnn/basic_conv](6_pytorch/2_CNN/basic_conv.ipynb) + - [cnn/batch-normalization](6_pytorch/2_CNN/batch-normalization.ipynb) + - [cnn/regularization](6_pytorch/2_CNN/regularization.ipynb) + - [cnn/lr-decay](6_pytorch/2_CNN/lr-decay.ipynb) + - [cnn/vgg](6_pytorch/2_CNN/vgg.ipynb) + - [cnn/googlenet](6_pytorch/2_CNN/googlenet.ipynb) + - [cnn/densenet](6_pytorch/2_CNN/densenet.ipynb) + - [cnn/resnet](6_pytorch/2_CNN/resnet.ipynb) + - [rnn/pytorch-rnn](6_pytorch/3_RNN/pytorch-rnn.ipynb) + - [rnn/rnn-for-image](6_pytorch/3_RNN/rnn-for-image.ipynb) + - [rnn/lstm-time-series](6_pytorch/3_RNN/time-series/lstm-time-series.ipynb) + - [gan/autoencoder](6_pytorch/4_GNN/autoencoder.ipynb) + - [gan/vae](6_pytorch/4_GNN/vae.ipynb) + - [gan/gan](6_pytorch/4_GNN/gan.ipynb) ## 其他参考 -* [学习参考资料等](References.md) +* [相关学习参考资料等](References.md) * [安装Python环境](tips/InstallPython.md) * [confusion matrix](tips/confusion_matrix.ipynb) * [一些速查手册](tips/cheatsheet) * [Python tips](tips/python) + diff --git a/tips/InstallPython.md b/tips/InstallPython.md index a3d1315..c5a610d 100644 --- a/tips/InstallPython.md +++ b/tips/InstallPython.md @@ -1,6 +1,8 @@ # Installing Python environments -这章,讲解如何安装Python的环境 +由于Python的库比较多,并且依赖关系比较复杂,所以请仔细阅读下面的说明,使用下面的说明来安装能够减少问题的可能。 + + ## 1. Windows @@ -25,6 +27,7 @@ pip3 install torchvision ``` + ## 2. Linux ### 安装pip @@ -32,12 +35,18 @@ pip3 install torchvision sudo apt-get install python3-pip ``` + + ### 设置PIP源 + ``` pip config set global.index-url 'https://mirrors.ustc.edu.cn/pypi/web/simple' ``` + + ### 安装常用的包 + ``` pip install -r requirements.txt ``` @@ -53,7 +62,10 @@ sudo pip install ipython sudo pip install jupyter ``` + + ### 安装pytorch + 到[pytorch 官网](https://pytorch.org),根据自己的操作系统、CUDA版本,选择合适的安装命令。 例如Linux, Python3.5, CUDA 9.0: @@ -61,3 +73,11 @@ sudo pip install jupyter pip3 install torch torchvision ``` + + +## 3. [Python技巧](python/) + +- [pip的安装、使用等](pip.md) +- [virtualenv的安装、使用](virtualenv.md) +- [virtualenv便捷管理工具:virtualenv_wrapper](virtualenv_wrapper.md) + diff --git a/tips/images/dnn_tips_01.jpeg b/tips/images/dnn_tips_01.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..9104e1a30eef2e2654ee789462d2e95f856fdff4 GIT binary patch literal 22371 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 V21pja!CE?!GmhGfw;q%S|Jj9Yj`aWl literal 0 KcmV+b0RR6000031 diff --git a/tips/images/dnn_tips_02.jpeg b/tips/images/dnn_tips_02.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..0154b9305eb9f1f1258b2ad54e620558cf37650a GIT binary patch literal 15676 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'!lVZ*v;8P5w(- zp4b8N-}r7I3k7tq=%(Au4zgH&oUp@Rda6K>p z002C>wo9M2lHVMWG0oq)KZ#cDD63uR=R=LZMiKuWS)I^k~-6$g7=K&m-udV#Ne;xmv2$qAIm0nt2oe0&~Kai#(9I zRU0E!s;TOfC;)gcYzb`EJP7S9N=V5WNa)t9X-(DhrvCtPOY~XG3dFY0fnSWYX8c-G zx%Yh!qX0Y`57E`KZFg-aT9xxisTJeMv0=ez&_b6c#xU9(^-?zLRicIwp; zQB^-WQ0V|XO{cJ3wC0gtXhuUTQIfT--mPn|B^JAvc_)1xnew_vTT=9mNadt-s}k)I zH|}4DKU3%c4>MwHkFl(-v!u%_Rc|7>J}UX|^G+NOOaK7#B-qbgvb#l-wH;cbD?aVo zXP54J;0MmH(U~z@D{Y96jyFRUW89ItwME~(cjxF%U!o~2QNp&zHYiuJxY{ZrtyL9k zzkLs;0J$VgSm9$FsH)bYDxy&|8~`CEjU|Ri)|7iyt5m9QL&b++OJ}pI8EQq5W^C7- z)pA~K5i?rSh>YbVnoXI<-|YfYo->}}ZJBi`g|QK^@zuaYO4 zfnYq#F4440Ja8mYOqBTNib}DmzO`B=`ldqE#BHUxgKSF8tKVElS;?4V8^YE1KuXs=d~x2x9tV7qN*{E z%W}Spy=b2bBC6NQh+}QjdD;CWwb$xGNQMx!sU#OhLt zx!v?Cn^6%XM?~xH_?(Svmg{P$i@g(uKzaaqv27V&JZSjtM&w5CYSmt=x}KYt{{W~z z)~$-`sRfqxX?15*U;hA*JHX(5woj?cA~KI;*l3O4S~(NWhNZqoZf%juzwXEUf!qWl zw4|?*w58W8Q`VW2v)bJ|phaRPBnc|fa$VcMa5}`B!e4axoU+^93ff;JZAc(gZR_6? zmWa7i)|s6%cuVe|Fg2N}Lzz{4l~dTtyPevEbpgv)bGuNhx!tH&P#m>)JGBbCo!Wua z2Q6LB?Lw~ScA#|u%U5%|P^-D!s2xCZ)!gpXD(-h`2T_MLUC!-7uIF~3bb-xRbGuNh zx!tH8AahmR?$j#ocWMVn9MyL_wFD(-h` z2S^;%cRRHTyPevB(g!tN&h0|3=XRiUfz4NQyHKmS-KZTPb5-2#)GF?GY6nOh)pt9! z3cH=!fzk&xUC!-7uIF~3bb-xRbGuNhx!tH8AahmR?$j#ocWMVn9MyL_wFSQRcq#jt(!U~yBVmhZ7Fe( zB$TSvR)<|(&h1UBx!tH7+b+*>B$?K9ja6>3T^cdU)I{E>nN@1E_8(`)_seLuO4l{> zKI9Rw>pP)*uDtlx zB&{m6YOeYvJiLvxS?v#NWVTBy(z~LuvXuV--QLkq?W?KZcBWO_?$i!gY*Wi*qtzit zz3*6`8(&JfRV(U=L!B(oOH@&^H#@azxyfco+SF>+x4iOA$ER0wyHKmS-KYx;5=Rv3 z=AyaMx$H!Co5)86rp%UgWG#`=+0r%bZl!m6dL1=)JGBbCo!WsWSQ#a*OGTz8x#=Q0 iI=NhpqfskNt6H6NcuV;ZtE=C3rma;du2oM}1OM66NZWV- literal 0 KcmV+b0RR6000031 diff --git a/tips/images/dnn_tips_03.jpeg b/tips/images/dnn_tips_03.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..006e8924670acf1e1f7bae4a6e5beb6c8dfab99c GIT binary patch literal 18863 zcmV;gNl>=`*#F=F5K2Z#MgRc;000310RRC1+Wgv=4-_35A08bV92_7dE+-%&EF&BoC^soAFflYVG#@89JvcHvE;BST|JwjV0SO5S z3=0ex4GkDFAsitxGBPqUGBPqUGBPqUGBPqUGBPqUGBPqUGBPqUGBPqUGBPqUGBPqU zGBPqUGBPqUGXKB;5eNY^0)PVnA^-vr0Rs^M|HJ?r000650RaI3000000000000094 z0t5vH2mizXK@b1|0|EgD3IhfP0s{d7000310s{mQ5(N_>F)~q+6e1%tK~iCHa*|WQ z(KJF;fuW)X6*XdGu_Qz#Lvw-_|HJ?o0RaI40RaF20000000000000330|fuX04EUv z0RRF50{{X70s;d7000000Rj;rF#{4o6CyHELSY0mae>kQ+5ij#0RRFK0}%i}0Q=h- zEUknnZl&WS%UN!p_=38Tv(m{M>*A+@vNZHeba;u-bm~FvFoa0StdYmB`Lh>1BEY;-S z;>^SZ9Q`yg#@SqRYLt?V-LJ!OZ6F=y`g9=o7#fTX zUTY(N5Y|_J5L8fAGM+fv9_WKEOPbeO;o6S9I;_1q3gBumHCYHNfvCXMWFW2vqXSit zg18!t4OT)5;A${6SqLkEsKC`^Ag%_Z167cMxEhQNRzeEkYA`if2rGf8z|~|Rt_Gt6 zRgi+X8jKBALJHt&Ff~~SD}kuM)np*92BQO2kb<}xj15*o3gBumHCYHNfvCXMWFW2v zqXSitg18!t4OT)5;A${6SqLkEsKC`^Ag%_Z167cMxEhQNRzeEkYA`if2rGf8z|~|R zt_Gt6Rgi+X8jKBALJHt&Ff~~SD}kuM)np*92BQO2kb<}xj15*o3gBumHCYHNfvCXM zWFW2vqXSitg18!t4OT)5Gi7HvGKtk@t<=$)fIblhA6`CP3G*;hf#Z}9d=Y>$z- zI-EV`?r>na(|`A+T3m@iBrT1w=5XS|=t*Onh~3sBNV(R!C_&7RAmrx4_~nO`V{R8Z zp~goR-r!v6uqw~UIVtUduF3S|Q}sgz&u{x(6d=b>lBg*vq^hT+hB@TEH?_7V`qsoD z0EJhF7V}+%@3q!?XG=9ZBr*V8JE%1wF9e?#_M-%!7xtiH67Wg!e`+vE@qcOtA!5oB z%}YTv?T{BSw*a*^AtaHt#y|-G?4Zzvo>40zdxV-pNgULSoiw#{5YFd-=eFbq=u>Ta z-Fr8oD+Hex_Nl=q#r>+XVisx4u{ESfG@ERu21-TDzqJEUm79~|{?umV_}{c3Y7(<@ z{BPP3o0sE$(1EB(w7JmS?u<9tSHUO6{iqm(yb^q0+Kdu>U)q6)OTj0_{iwkw#r>!l zgoX)R=Zx-vZL+PKlj8o=4MJ84J}>PGa7pohXh6gz;FIG1(2Np%U)m5c2@#1Lz~e5H z{i@lyJ}>P+)Fo!*_`kIoxqdJ02pWW}+`kw0g;^UTBQDPB{?rdbSZst2llG$opBMI^ zViNF4@qcPCOYy&GK*S~Bm*alWmmrm;mX}$!$_)rg!#Bkq)i`AMgW7?JOTj0_{iwkw z#r>fJ5SM~ai~ChNOzsTki(gU)p)WT70El=f&A;OQh#G{f+?|r12*EGL{hvh= z{?rdbUI~6L?M4ZHFYQ3YCE%Ch{?uTX;{MbOLQH~C!gIR6wMcBX9VhKT)Ft4P;(pX% zlj45V3_@NBJ}2!)2|g$7K*S`R;~vYt;G0^>$STcB%Beevw2fafgHjY+ZwR>F5K0tW zZwR>F5Mj$-(dvC4HL9EJ@%lo^mWcjOQ>1Ks)~aGTJbFgRP%=Sy+&l{Ab@BW=tDz_WLn~mXZ$cnv&dV+g(EcIkzW|6cL z!4}pOy|2ZPqT_f)#_))gD7fAcal9%Q{{Uoqerc&!9HeO*KQzmY;RK;Y#_)@c;RK;Y z#_)@c;RPexlhyJ}N{EbdX&YZ8%Z=d#p+&~F5K0tW zZwR>F5K>*J{a+-+sR+j&pS|);K~`+5Dzjx-0E8g`xtU8Nwp#>?K? zb$PCu5OL}(FhY=>zy^u(C#1$|r~hLm`c)0{|lpyLFu_ zzJwX+sN<%hij}u>BWP&4RRl5e7`cO2%&onPHc$HuUSBeSxrn=g8Hl@qF$fo!i?|V( zi?|aIgPE40jAVL}7%zwBwNpVKCy$smLQY!#jZ^9Qtu&+>Xzkq!D%qI(fpW4OahPga zS~;~Z(fO{*XeYJ^ zt*{j;_8IC4?bM}Tie@721ZE=c1jH(Z<|6I{W+Ltc#40o9BIP5PHhyWDh`WIw_D84Y zn1OkSyMY;qyMZwX7nqB<5txg(6A*(uP(_YjVA}a6W+Ltd5pB!r`6i%VVlLoDVlLoJ zLIvg`?gSVjw!ln5)Pp<_MVW6fYD~;U+z5lIZ<1mK<|6I{W+Ltc#2{W`F5pY3f-K9q zfoMygsd5MqMPbYea}jp}xY-I&FEJNzBQY0nCLsdz5qAPi&_#+qVA@)eX4{X}g4u|> zff1;NXC zN~)5j%%_pDwifYmIx}_`3)rCN*VfcSU6b%h7^j%L zJ)~Tc7+f^|ONmLBa*b56)4pK|n6=H3@wY&;j*h|&v=gOzX);X&(#0&4kv;JnvCeJq zp9LSvGInXv@+dGp*qqz~#P2|4>c`b&ntGXA&yj$;2<=fpGes0yAFH@`t&M9~z}A2o z1%MraBPacaFE5!u%=>pg*ioNu=lcq35Gy|2&-N5&+qwS2nuHw8volUdsTO|EaPLl| zoxGKrAFH@ka@X{FpGVC$hwO~jKATn(eFb&` zJ-U`}Yw*1LH$T`>pKj;-3ThQXv+dmf0AWUbyPxbSs8nUovy_bw+3p?bx%TdVu&Mt5 zvOPaE#0t;1bNz)G_U?bMrlA6}?cDzWVMcwMpX@29L6#}mj$IGh?j6aw_U?bMsf%u3 zSIIE~v+dmf0AWUbyPxbSs6edycR$!rXJxfN*i%q-Ak75q%(p}JcM4{GyPxbTVCq}s zn1NaL?tieOKHbmu6x1MAeY>CRDRa)u%d|h(R+PE=mmsK}m_~={?iD%q?tieR4UnY* zv+dmf0AWUbyPxbSs6edycR$!tW}TR#(EYyQ+_j|5wI8Vj=h?ab!i@WOKiE@Hfm!zM zf3TxI-Ou(E)F4)UyPxbSW_EIsq5D0;w56Z4k4gy7w{!i48TRgfu%@8`v+dmf0AWUb zyPxbSs6edycR$!t;+>eJ(EYCAT2kWLlhlGU?cDzWVMcwspX@29K&<xQm%G86OFb8#N23Jdnm|Vl`>qdrK)tTbJ||moI?R=8h2^3 z#Qiou$TVgczr{X`&B>e1XB8LYU|hVu0Lj8$*ra2}i))lPe@f#9nR8K-;9vwI8idO}U9PXR$@0n`kvDx>e=e#9nR8K-;3}SDSM< zqVsNN6b-sj`$+Vn^KN2UGjf5Un>)%4H$~E~Hs*0CyxW<@18$3@UTw_cQF*sBi9p+> z#kD7?MdsYjB`z~IDLJg#-cV_}E|qz=Gl@m!+|DHfZi}T}ZOr0PdABo(K*YL#v$M$; zn{zmnx^p)tW`=6sP-(g@m3g-_iACnz&LsnGi=|#|%;Hgbw=;=API?y~1$G;-9|fAA z&zXNUnzyS&>CA2BvsU#Lr58!O{nl|s=kBwLsCChFo6p^66kdMoIG~w!qxB};XLfYH zJVCa_*i+C$HdU2bvaEnY5P(p1DOqarjU^M<+KGc4{gGmSKLO%{Ko(MwC3Q4aP}4q8 zCYt%S_pPL)%a$l1GY8Z*@VqhL0!VQewTFTY-HSB`*rM|Jr$-|uiLyrE<~&`bc7&=A zu|?(cL7@mj0SH14ep~*JRp|MrQacSJPT-T4{{W-adOm9KeT;c1)ajyAiW~1yEP2{@ z#(wiiQ2wNTNu7w3j#x4rh50dzcDTupfwJhXRz&6s$osVqU1c!-F~2Oh80Xo&4vQ;7K!k~|CPglt?E;0+{8=dk@L`C`5QWEddohg9} z!c=x4Nz{Q*^)2#DONXg%l41b}ReP}8#MuNf#JR(AiMppE6L&w&6Ln5StBpZQfv71& z3a>U{Az4yhsoqFMm~PN~66V{B)~_E{-z7$>N~{5zB=syRe8 z5mdRa4{KiB-acsrk}s!9^=PsTc|MKQc{ZMv&%2{w1dh_HLk;NTImhbkJ}Yv~LG~!T zzGyF){{SQSqcQ$R@lHYn=0C{(D9nG6{8NyFmzE&5N~q}{v%ke&D1YOSByiE#RkF|Y znx9Y1D?`;iM(0aQ5fHbfe`jiFi<&v|aZxu=KP1NNgl6>RWazD5lv|C%r3Z*zEX}|6 zKZ@r^(Ek7t%GT`70DFgsHeDwkm=4P8Mc!$aRSV3H^Zm%oj`RJ=h*cT0Ba{w%_IIWjhk5)| z{{Yw?l*6eNj!5xSIF~z$Y;g2#=f76~(%_4t9QW~B zU9xN(@Ykz{%nH~4>N~ilopsh_^WX1A2N$>!0M5ioqGox1Q}v`LppI#Y`Pbe3KCh&7X+wDRV|_&XL<& z)`YpWH_ave+1|9JpR^B2MH!#+KZ-Ly zzx%3A5f&(-DNAX5y{Ey@AXaDmkK&UAR;F)A{hjMyVoX0}Z>1I@IC?SCKZ>?s zd`IzCi>q&vhIP_@NK|G&$o?qIf06uCRM`=hq8mW|k@~l)#~BQWXJoM()2hDA{{SUc zY{TX9QK{0xAMbw^IiK%;6vQgYd7tlp6lQdJOk<7#CTkucO32DAxo(V&tEwy*}T6}D`U$>ye% z)YLW9?k;8*4$*BoHx#CS4^y@l$I2>5Ys`#xF^R4>y^XtWgLM^SYiJ>=4ZtN}b`o_e zP|X;kh!>4tH27)brl({PHqpl1EglI}3~wTe?Hadupmusb_*0&bzTPTuH@Y|@1AC)_ z2+v2~Zxm;v@3)Ga4epKzz~1QKgP)dVjO3c0c-i@>hIoS>(($V5a?2b1rl*=VcX+DA z*0ejCHg_pqG3vBUG-jN0$6{+_VFJzxay7i1b4O=laBFamXyA-qoQ$q{Jyj)iZ|61Q zCkyLqjh9K%Gd?-(+1`=5`tZPO*H*c8I6)0w9T_iIWw-IMJTT$&;pUTHx@R#~t zX=BVco;K5+EO%!-Buv(FcJoHq>{=Yg<3fLRn928)0bZ}LYv$67l&l@R*SnPS>Qv-QO=8c`ng^jW1jtH!V zSotft;XXNI&9|O4Bw=SHcQkhPEiti~w(~}<%QLpK=_Xk4o_N%k46)`%JSLVm3FeJk zlHp@>Lz*}(Gdd=oSouvyJZ%s3wP$1Rg_@m>TkV>2!0ja!xQH@Y|?BRd~_CCw~$Z#-*Fz~1QKl{*_|^G3bNTF13umOg(x zZ7WSId85w?wC!of%^O>l=3{eC=8g#yF3b|ggmcEN=+4LA3PT%&b4IPmz~1QKswifR z8)FKyOCDv%7}SR`xz_VX1v9a^mvcs~%3hkCh~|$r-gwlhJkj)g@wBfK8=G%5YTTBH3~p?5M+Dpr?v4t@s^??xglA*#g=`J(jtIcs=-`O1 zc0Tw>mT1K7=Z&A5(pcW;;Iqoc=iAL2JG@j`*}_=+;Vx;Tvw7oMb_VxH1i6^oH<~r> zMaQ-C(f7iurH={cjY{|%-5e0+HwosATal7smOR^e;Soz7DLLb5S_ZVl-e};WCN~_M z(Y3i%tLJ0yglA*#g=`J(jtIcs=-`O1c0Tx2eDUIF#x#`NE$)s9axu8s%^LS2&eqPy zZLpIJvGP{)#>&xww%HsKVPknKd821?5iw03ZM^ZRLnV(o{&?(GiH*&-nl)}v#T2X|{G; zKnD2vc%bxXUVka&EY)^RG1jqyLiV~GLeC+l->!woZc?4nK^wA^t)`W&eMH#6&B#NJ z3;o?7XhH4!7J3h{MdkBI$(0jNk?E$Lt}?zbTrFdDG!nQ`MbN)jhV&bdm7aIOll1zd zJnw@i>GeR=C1;)RWc@y<&pY7B`h8Gl%RkZTeIGSOYd%W3Vn-a4Q_(+X!+Kj~b}pt( zUJEtX$JKA2MKJu6Mxe6IBe^$ICuZc)ISptrNps|mc5ruM;$*jGD=MgqY~b@C-Gr{O zoQ-hEKOneux2FCfrL41>$p&fdBZAI%TCUz6WykxDq`zlxtSv6vjbf5h$=lJtY<4XV zl;V$~e+8#HWk28ZPgyDDHh)C@dy})L;Xi^z%d-%doj(ca&Yy(!rbqpO=~p_6L6q`= z(LZN$v6$HOPvDBm4daj8hnRNM&r~5@msDGuR;`Y9khL&eKY0hc-NbK-U61zU`iTbx8qaN!> zNJ9@!eIX`EPClvp6?3PRj*a?)m8~|h_`%WJWTT>I`c)yB*a^))X!a^PXJ?<$KWB1U z&)Q`?qcG1KEen|huFc2MzwY)e`PY0W@K!EUMkPFZ?_YKOTQ-pL+;FQ^pIXWlsRUyvn zTB3fX-bo^3jhBu3)v6^qmvm3nxlQoawM~PoZ<2}i$Lmy%Q<)tT^=?Tu4tpaeC*K{l zD>_R#YNzUgV$Dw}&2>-Utohs?)`*{_B7HoN1C9V=%1@{ zY|(|pP6uHMlJ)KM{MAgZ~Y#xmIUqLP3mKRh@IvsiZlst@`&VWTZ^{#Qx63HrLv8 zTAk*avcoB}x+m*BiH2etdMEHka_m)omQP7p;p=1cgiSk*Bgu*TJCdN8+1UCg?Cx2v zm`*FD+J&9-I~y$<_$g%N!uhAIx#;vI=TE|a1ZR)JdLWZ(KT={tq%M48HsQ|JQ_w>; zRh3z?tbjrgfK_yCc?Ilii%rGF>`?c%HW$6Ytpenepd||0XH%KQL}n4LK;eXbXe{bz z99mrrWVcZ*8Wi$)aF*ty!sBuq$Ml+?Pt8zhaq?Ho zAJS^QA2m`4f0zpu*T&H|*@A+4XorF(`zouCPZyGXBsxvDd9FrUW8|lEn9^Mn!}Mza z9V@LV=QGVEfI6w*>L96<-wWfux7nHsn5!rwmL~@^xN2ME+KqXNik4(rnaF2FEu?D( zj&L?MUX8MenGB88;c%uoZ-)GyJCE)1txR-2{p9en!ffz2xUE`>+;PveoeBei7YdRR zEpF6Cd4X1bBIA_#H4Xm&+2)kjf6jRR%d14}LPWJ>W^Y#~l6%dBDGlo6Pm^XPi0zkc zF4;awO#3(FnsyJ8TRzSCEx1A``pNvq`cH3M?<9&owtq4HliSxj$rh_7+N1fkH}F=G z*LIERQl6ZCOEtV>L>mXpsynWe(ys==^Hg!^r1Yg{T-JCE+Rre$3zjm&)erGO`#|)i%6ew` zCLX+cQXcG87VH`oCvfN6I>b+@zNHd%v8kU^eM$mtf#wz6uzZy#*dC$&)Rz)o+vovW zDHqxQ03@b5(K)@Orp45LOFMg1YDTzRT^^pz2%BM6nDl4OT5hdd(?3dY+6YrpG&jvd ze$r7^Y}Way@xSthGpu)zRE^kaWAPSNVYA=h5}0vP!gqw<4C|GlHjTb6K{l2CVOA}M zdXV#JALbO>c5-w&o#w9XlBo~g^((yCd968K*`@mvy(v`vbbgfCe#HL(B9%|qGt#q@ zu02+_^^E+{2EatR9?#7XYz42be+@zqt0l>`AE_}eO{RL25JNUqm07Z^fI<+14p^p= zvn13(4YQAKfK9Ka_FR)gSn5igG+~+QfjeQuECX=!Pi4)CUXewRc!@uU@|2Y?k+7J= zuP+U2+l9A&D?iKoQ`wR$nN>?rXoH(f#>VJFo6-;*F%Hh&)$A;y$T8&FX{j zvBnzWG=xxzxfERXogLp5vf2_TKE)T2{{UziX}j(AqSJSq?M*@jT5j`wsI=YY`%_SZ znU%!f%4%-*?DtekB^q(JQ2VLbVE+K(YJER7S#*!cELQOBNM$fNrOnZAx}mw#Bt*Ts zKebuL?Qrr&tUgL@(@Bxi=UOqg*Y2uCo#jsFH@C4_=TY%QKWK6AQqx+D8Am5FzKN`# z3%TS129Tp8%Q2#CPJ2tBd5GxTx4%t1eznD}j<+Y*ikddMNS^D<7`D4>3psIpop9cA z`1b6@oz663ZkKmf%rf`e?OuM1E6Cc$#a|eK&mgmPyw{+6?A$=!06W?&Thwd#WJ5gn~>vgwJM?HU}oLywwk1C#6?8-D0I|xEs%IzUto5E^*xU`&L?Q5wNWekhWKm;G*X@PPE?_mqN1bV~b99|L7M$U9ZMNl|&cbvhtYZ~kU)eGl3`Mxxdu~^RN@8z4yb@$5o#|R>jwnKq%4-tHmy`jG zyE~E{o#ig)w_fF|{>bu4KWTaKRDxk6WMRbK3T4hYtRd~!xmv465|K%!*^<&H>=KwMj;1ZvGd!b!D$^^KQ*45 z^QKvDMw($R1I})}%G2jVEseTQby}R-CnZeqVs4!`TDOK|{gjN#YEL=55mTKyF}Fe7 zrkvhkFZ9vD5h~&FvA1a5J3U zt;!#r61$w;t;vz>Gt`MX*Lsv|>hR}IK6`e%ss#T@ zP1PmN@)-^>sP-k(XAG?8w^roo4k`&elBqh@c`V-Jrae}fvw_X$w}K!N=Eq3iYKo(4 zE7Q0L8cADo*Xm{&ej|OT!!N{dwOkNI!WCebi38)i!5FtECCRlPsWAjIWm#35D#!#O z2o+OP9VIlC5|S9fb769_H!RaSib|5%S|ff3M&?=J+AJ-++$ZGFB2(YwhtpTm_A%?(2;+7;kSb?9) zYIe4J$9la)49qiYv+os}-W{unTUc+B&6;idc&3bqxOi=!p+z@|0s|CuY5|+N@%2`*rVI_|CaSMLaV&Lo*uo9R}fK z$?uY$Y4Uup#3FEXX8!CtZ0hPNfMvTXBYd~$(c=AZVlmmJ4jEVEf& z8{|CqTYA|~)dl6BlX8@VXDga8n~V)3Pm0#YWqN1;W2xoQaf;xTG4fxrGx1GLWgDkA zu6L&2s?|(-DLj{xlPK27Qt2B+`$jDwCdT^oEtxkfI7cC_f=F2BS&sX@MM>nI&YAxJ z#?D~v4GehjPM4`~lHorsP-beM8;i3|7XaHAlF~ArB-toc+_j;$Ehk7jmZo_1w>-Q# z_oqng{{Z<>8-R`1J%wO`wvw)&ITV1|x>`<=<`h%b(a#CNGjtB}w>Y1VF0|c3dRhF( z`dWut?g43Sqf1#Hi5eUp zL2fVAY7$e5m$y3HMWo@yrpYtL{bw&8Q!6YsEf6tX#_~JzTujbDZ*rRz&zHIe*m-jG2d>VgFf``LhH}3u}xtXW}el|$+fg~bs@37?jW2d;H?>6 zdU`lxl2CA$TR|&c(#^SF9#hFN*Cs~nH4Rj&J!0ZVmSQEGbFRe55Ho~`h_kmiBfu36(JEMeoz zEVU!94>i7O?zR}k`&SM;x09U6xr*!wm8ZTy@B}tw(cGg}j<<*Xx zozOE#*0Vf}5$XQ`*cKRawG6N@J*EgKMr$zI~2Q4 zRjC~+T_J);yfxtH8l0&#alS)rT0B;*mmV0^_g&`X`6od9Ft^3lShFoBTezn(76{sT z+8w=?VUDNoefKeSN{N@t5*{X zT1GA^kiyJAduVp2(ofO0qpKcaXL07q`6g6Ez`!}$_pG^=VUtPIZq;o}dOfG1XXdlh z=ybkmjfH|3_PcvlXklS8j&~IrjiL6ZeYe>zLw2*tQ#8!OhdXO}tKwyuwX1rUrIYFO z-FQ}?tUj-j&rTr~ZH&8|MyyJ;rYdOPG=zqObIwi8FRi)hv6~Y5RUtQ`fpaNxy#+~< zHp^!i?`In=RJo}rAafiXH-{w3UXwo_Sl(k(Pe#vLi3rcT%q;9+BsAXF-lj;Ko;vmK zLQY$tJn214Jg5Fc)YGwn@@vxV=@LfHQ2l&W_|7x-Xm|AaJd&x6q+%Zvf0sXAt^O%7 zF|ELEZ`q|XTxV^SP7biXtq5TpkoYXGU~`S{uKLjvVtf)|b?j}Rq|27Qb&Pc3>YL=Q zvq1|pP1mb>W?`N@R^!imT1{;AE2KImwegXA;@+OBA)6}7tl3sTAqYSrWXg3;qRF$= zFaqW`Ksv8`E^*40k>u)t{L8AMov;UhLkTvqx8{Smh2-V_Dv}37PUBAMhSeCS(_w@- zi?nYl@nzhjB(PHd0LK$lv9m_<(}j&7n-P5{MzkKKX375mVT;KB0JT~Q&R3IQs(V9B zjRb+%RcL06QN%HJ9?ujTP?w*NdEil>k9puwF$sD2_nrkA`1hU#23)cICa2J^QPi{Y zNXrw){HCW#+1=uuB#e?KG#%ZFUYf@0?VJwPV0nkZHfO}xEI-oBWMg7;uddyTm6~^% zZ!Hz_j4T6CQr3Tdxo-t1#{I_l(${%JYJ17c3S$P>qKZguWkW@~i$ zMd}T_6-I@8>}H|be(vO!%NZ``YVcB~H-wR;I18|N1h+muP7VJ6MKMau2IsSKXv*-+ z=7Ug8hL-71bu?8p6GJNlnBl1@&x}2;#iX}#bThC)CZEwyty{+qZC*yCs4-`kIJa2Ki=kjADm5zrc(ZK`h-5znJ z+Dr76SLFHfWbUZR<1kcP^6|@;POmR&!i` zOVxcjGv;qLc?w*2vclA+I+C_@~iOnBcub8tI-(o=68tTbVRx?|zCOG+^5o=%0>8ubV8p zXO@PZXv-f9EJd_5EI9%4WneZgJHky)TAWDN#YHiW{QI|0lJCJZW>PVBZd8(3@3q={ z6u4?@8>Xk4T=$&adHHg_P;*9WC%vGHUEPQ1pPI`M#Md&ZvJ<4W?f(Evs%4Bc99_GR z>7(EJEX*$Xt=}#`F^+U!&Sg2#n}CMw6L915NOfjcbBjd?554xZTeWuCG+~#&=#!pd zl-Qk}%KG2!ndO`QF^){VOxPIOoKVi)4ve63q-;-(tqr~s(PGk-K@1eJn4-|uoy#_7d#z)aif+imCQ!=I z(>h6MSZ$=?cA?~otg%s1OvX}DOeQw5b8H9Zy6${N;G2WsjO2FLpm-;yU2Uo5!;9+U zQe>Lx>v>g8TceZGnq?(5B_my#0Atckw3NR2X?%Hju$L*#bDv#V zUsV+wG1E>q^k^e})vFo*0Q2w)ns>d;F2f@pZXM(1yDfAW!_Bb`0NY9>Wi3Q*j&`-| z#tn$NlgDq~OXtQ}#~;yO!+CAlUI|0t5xOD$4wO-BMT|m*xGcE*6UBt$KE^_ zr^hVE_OB0?eH4`S(ex$^QO2uyM9%Cf6ARgefm5H4tAsD<##(CFSQ z;Cn*G+>1iWV@@I_G6*2No8PpZ`UaKILJS|ta(-$k%`9#aI60-wxwtpI_3KJM!}&DC z=*2yQoE>oYTzMPl8cu<|br6D)#K>Z7akMpz7HdafNubk5ACdn6Yfoa$LG~!TkNZKT z2tok}LJS#W`b|%zY+&X$$Sj#-`b|%zY-YoJf(6ddS_QuFQJUzmXialNfWKyyHd(QD z$|J(y-F)53tYIu9Us~C31x81KquIpsOL}UAr6kt8Z-KtpD zIcil})1GsVt63$j!z6=FrL4D2)L;aYZ6!35B^tu`8ZMad1Y~$AYj89T${(=rC3KtR zhDMhb*j~-~rbYmX;EvSD$34EEnu$ZRpf|TkQpUZ$6EjGYM&!uBFBxWrC2RI$UBwLvfHqyOklwMbPt;}I--bmM} zXKW?&IGsSNVKSSwSYx{x;KcZwh3y~MtqVFfk-ExAw4>6R(-$qUymW;4scQ|!gRMRE ztH(Oizy z(H?}-T*@rHIk3}ZiLE))r|zzkTZOh+A08Q<;sunj$0Dq6tuf8COmM!nWEN`z zghF4i_P1Y3K);O9^*$yjo+H+VmxnZ3{&w-~5zK z7K__W(_4!&)>zC5i=R`Rt>bIYP*6)a;>9Ml>tqcSm8^PYClq9T$@q)lNCfWWm#35 zD#!#O2ry-w_wstI#ysW?7&Y6r-<8)9lON?ZEP&KN4lOznF^4dx9)?=0D8`b|%#=C()Gx5yx_DSLz5rxd-x z?pHzzVwd5Ma*R^^G44!44DvoqQQk4N-b@aY;g52OwxabWjY=w*rTAmqj8gnD?o2`< zSf%)5+@QKr2+fajau8%`lupr`8X4a4P9{tBW89#3C1p zUxq!%E|%R`;+UltGRFBtl5}m_?|3G3r%r9YiH)kk_^8LaZ+6`!yHpkhRMY* z!yHkHUxqlRAnHSG@VZ>fIx(wyzA10jjw)g5TjZF5SC`?AD8(rM0MC-nQZ1VtRP>(>yi-ttH7Qo&qp-L%Nm*I{m#W%woQ&5OjDZUuu zlyioCF}G)W)Rq4LWB&lkDjS?_?HCvFL$i*x;~Z0zA{BXl7~+gl{4vEf3WZ)@hB&H5 z>2b-?jjr<0mmb`nq!8mPm|K8p8_*1*-5Ag}rl~-lm*KaHFD<&U#W@HP+~a=d?pUFU zSH#j7EPPi@CYS8&@>$Z$VR158i@Gpx{mRbHy4@3f%R&{=wtGL}H;SV(qGxnq4>hR? zqil67k<14G(c-NfQVX07H}OxKsVeOn0-9fH%*fe2-_?-U6{SnA2zZ0L>-=YqM z(RI({6<>+Z>~GN=f~)a4{f+t{wpjj?Q|VgSu-_oKxmJ#)nKGfy$}_kI>1k_p{)<~^ zDvJmHQhi;<{Sb6ex%`5w@k)yRemW^>~GNq zxwfM9Caz?Z6oWsk4Mchb2$xGd=KVx?CZeaqGuti{7!FUeu%B%O6T$# zzr^PDH|UN-SNNRX#{Cf;1a>ZeA*=jOZ)1LlrK> z@*1ziruH}Jjzd-Wl-|bu5N=7IZXaLBtlWmH@hQEH`X$RlR2?1il-pg#{SjR>E`K4b z{7!#keu{YwU*dE78}vkPLcz#t{{R!8*x#Z#4PWAO`y2E@y)XX&f8?@q8o$Kn_BZI4 z$ZGT7)aTXQZ_x)$3kM;q{7!#keu(5Xe~HiRZ_x(yEF6Zf@j3mC`Xi9l{wF`NzeF3- z;@XqcvGNMP#V7VR=$9P@UMG*{lk4s`=!)tgbNK~d;*~GNq^eh~Pukks(jrt>y)&3_pvA;wb=IWfTH3iO=hO0F1{G8gmjruDJ z3cG()pV;4`4uTgykX8OEKe4|=atgo2C-yh!gP?`aRiZQdk-Y6`ETx{>RiZQdk-Y79;pXoI|g|V9r@(UJNb52RA zvw`MsTNvixZ#Zfls4j&V+uj^ejlJQ;1ffPY_lFc?Z+LM)xpX=|Qff@kX)*Jgx4knP zd(Gm4$W_M9^LV2hJI&&P$W_M9^LV2hJI&&PzxD^G=9rU>yrgr6#{U2m+->g;C?yIp zx4bx`8+*fw2||o*?+z+4x4bx@q+Mjbuaas^Z)lQUaN6JCn~lBU#RQ>7Hur}VV{dqI zK`2p;z2U_e+uj^dQVyx9iBP?{rt^ms%x&)uC?yIpx4bx`8+*fw2}_%)a=teAhZMP- z+|#+kiUy5C$qJ$Eu;(|5GmP)IiVGoEIL`Zcqd3m{c%ZUW`r`GE^i}hW@3)Fn&u%EJ z=IxH(0)gmN#?JeAqd3m{c%ZTsbByn|iZhJww~7lYfA0L0<7a)mRWY+YwB4QP8iicr zJMH3(<2&u*g2+|QGrry^&NIH=C@hyA+@7UuZ11;d#yRL^E*+~)CD4`qiryii#RxY^%t6k}(7yii#RxY^%t6k}(7yiit6 zsQpQaPjgG7vw`P!6x0ySm1S0Js~`}BAP|Hg5QHFyG(EO(1bCz}k`T}gOh1y)gbC!Z zd=_v=C8zi-;GBdB@KG_NzMhab2hY%9&66m($&6}nmH*Zozc>mMTPLnLu~8*TGla> zD;b*(q?PZ9&UI73zI+#g06%+0(O$u{^v(dbILJDP3VAFa1)LTvhXjyh{4a^oHPSuI zjoRAMZU={w=^_=$VE9bns9~jOaV&@i?Ra^u3(3^L_hky)6ctW@)I%fMVm6hdYTNvf zdMO~Kz}Xzwg8{xHYb$1{F=4|NA}?(hvh(7aag%7Hnucj2idRVZFaymvu#0xu<40oU zvn1sx=$#allD@2S+b+8^Hbx8YzKbHgw&bXjcd;3N=mwkWB&k+G>+ur7@Ql` z${Y!IfVXPqO_H*;>CF`@;;Dy3vN&jw*onk9=cqHX^2`CFqJE!LZg{%*^juWoi zmzko;)vy|2B^>KANZz^DA!WQ9UM%SHn=_P zGGTFWBG%ETwPwkbwN&+?@1>SG8rekBTKU4~-L^fT4hTD}j)|;xh-}THaih&NQ`0+C zai1mQqsf&`o}NeK>5LGDim341&fw==z+auL6|W*uSmFOy;m1mNUDNM68 zG`-AeU~Uo(ovalQ($tKfUmZOh&ZAc4Z- zILPn|#>hP}v{O_wCecGR6w*fwrSd}7-t2ZPBHgypaEkPKx=Y&(SGDbO^;_e3G0h0Vm%0T;Ew8qnw|TOf0p8*VHCu)6Zn zWQkc%6u-;d<2-VgM;k{+D~P~I?64a97M!g~Q&8yt0OCtDq6WnqfY^{Y67KDVx*fq z`Lm*1TcW{i7vJED^-YG6_QJ@WeO9qVkkdvBoeOLQ&6|6EOUbs6DKja>Q%6lTJrQ}w z5g1>F?bJIoi}^1{lw^Bkjj?B6ErXjBabEg$mmLirWf16_OC>p((8k7s>yv8$2^akq zSJu$P#>o0(fH^)4B&Vp^H^A7y-(ZM5GnPZ8)?B)wv+U`d6T3INhYuaODb3kG)b56VV zf=6QD(Na~$)@PxakByGc)Jj}2xVuHIq>E|rS*hr%-%%8%j%g`j!Y5$46FA=F2U``i zY4b&T(kTT@a0puGy`|jHEC9BX#3fbDNlAwtDRv?NEoio%5QA9X*6|Xppx+0izK&(n+}j*6q@RPI8&8bETtvVYb>} z)=hxWZThA1x&eNJNOl`x8u+a4W@-o=@iUB>r@hZ$EnsckZ36l=eqnPeV1Foc;fhkn zG5sWvy}C}I(0fhJofh0~i0sWK zcJyO*^dSL^??yAd2tZ?Y^ka7PApwos(Twjx5E#z%V>{4<1~+d;H*Z1^7~Q=X&h#Mx zjPFJ=gdj1ydNI3t5P-(*=*D-U2n=U>F`ei_0~@!a8@Hhd3~t_xXL=BT#&@F`LJ%0; zy%^oS2tZ>y(Tt%8ClOJM??Mn5-Mtvyy$C>KcJyO*^dSL^??yLoLJ%0;y%^oS2tZ>y z(T&^Cga$Lc7~Q=HKx20FV|Mf*0gR&=-h?1Ao#@8x=t2V--i&VEgdj1U=*I2nLIWGO xqZ_xO2n=rCjBeh9AThgoF}r#YfX40U#_i}r0~@!a8Qz2-F}r#(yLu3V|Jk)_UHJe2 literal 0 KcmV+b0RR6000031 diff --git a/tips/images/dnn_tips_04.jpeg b/tips/images/dnn_tips_04.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..74095ccc63ceb20e6bdd8093c37fe5f75cb78caa GIT binary patch literal 19867 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 NAR;0H*{Fy=|JgqZbKd{} literal 0 KcmV+b0RR6000031 diff --git a/tips/images/dnn_tips_05.jpeg b/tips/images/dnn_tips_05.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..634cfaeb5335f28931b887a2721260d047c8a35b GIT binary patch literal 17230 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 B0O0@t literal 0 KcmV+b0RR6000031 diff --git a/tips/images/dnn_tips_07.jpeg b/tips/images/dnn_tips_07.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..3bbf4aba61d2e465a9deece92ecc7e2d2908786b GIT binary patch literal 20158 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 siZ?ptjVE~sIct^F0E8d^*&7bYEC2ui literal 0 KcmV+b0RR6000031 diff --git a/tips/构建深度神经网络的一些实战建议.md b/tips/构建深度神经网络的一些实战建议.md new file mode 100644 index 0000000..be0cc36 --- /dev/null +++ b/tips/构建深度神经网络的一些实战建议.md @@ -0,0 +1,103 @@ +# 构建深度神经网络的一些实战建议 + + + +我们将整理在训练神经网络实战过程中用到的很多有用的tips(主要基于Tensorflow平台)。一些建议可能对你非常用有用,有些可能没有太大的启发意义。一些建议可能对于你不太实用,限于个人都统一整理,大家根据个人经验、场景选择。 + + + +## 常见的一些tips + +**1、使用Adam作为优化器。**Adam优化效果非常好。与传统的优化器(optimizer),如传统的梯度下降法,它应该是首选。Tensorflow实践笔记:当保存和回复模型参数时,设置AdamOptimizer之后,一定记得设置Saver,因为Adam有些state也需要恢复(即每个weight的学习率)。 + +**2、采用ReLu作为非线性激活函数。**Relu训练速度非常快,简单,而且训练效果非常好,不存在梯度消失的问题。尽管sigmoid是最常见的激活函数,但其存在梯度消失的问题,随着梯度反传深度的加深,梯度传递效率大大降低。 + +**3、在网络的输出层不要使用激活函数。**这很明显,但如果你默认在每一层都设置激活函数就很容易犯这个错误,所以一定记得在输出层取消掉激活函数。 + +**4、在每一层都添加偏置项(bias)。**因为偏置项很重要,可以把一个平面转换成一个best-fitting position。比如,y=mx+b,b就是偏置项,它使得一条直线上线移动,以便找到最优的position。 + +**5、使用variance-scaled 初始化。**在Tensorflow中,就是这个接口:tf.contrib.layers.variance_scaling_initializer()。在我们的经验中,这种generalizes/scales比其他常用的初始化方法要好,如Gaussian,truncated normal和Xavier。一般来说,方差调整初始化方法基于每一层输入和输出的神经元(Tensorflow中默认输入神经元数目)的数目来调整随机初始化的权重的偏差。因此,在没有额外的“hacks”,如clipping或batch normalization,帮助下,可以帮助signals传递到更深的网络中。Xavier也比较类似,除非所有的层都有相似的偏差,但网络不同的层具有非常不同的形状(shapes)(在CNN中很常见),所有的层具有相同的偏差不能处理这样的场景。 + +**6、Whiten(规范化,normalize)输入数据。**训练时,减去输入数据的均值,然后除以输入数据的方差。模型的权重延伸和拓展的角度越小,网络学习更容易且速度越快。保持输入数据是零均值的(mean-centered)且具有恒大的方差,可以帮助实现这一点。对于所有的测试数据也需要执行这一点,所以一定要确保你的训练数据与真实数据高度相似。 + +**7、在保留输入数据dynamic range的情况下,对输入数据进行尺度变换。**这个操作与normalization相关,但应先于normalization执行。举个例子,数据X实际的变化范围是[0, 140000000],这可以被激活函数tanh(x)或tanh(x/c)所驯服(c是一个常量,延展曲线,在输入数据的变化范围匹配(fit)输入的动态特性,即tanh函数倾斜(激活)部分)。特别是你的输入数据根本没有一个上下限变化范围时,神经网络可以在(0,1)范围内,学得更好。 + +**8、不要影响learning rate的衰减。**学习速率的衰减在SGD中很常见,而且ADAM中也会自然调整它。如果你想直接一点点的调整学习速率,比如,在训练一段时间后,减小学习速率,误差曲线可能会突然drop一点点,随后很快恢复平整。 + +**9、如果你使用的卷积层使用64或128的卷积核,这已经足够了。**特别是对于深度网络,确实,128已经很大了。如果你已经有了一个更大的卷积核了,增加更多的卷积核,并不会带来效果的提升。 + +**10、Pooling(池化)以保持转移不变性。**Pooling主要是让网络对于图片输入的“该部分”具有一个“普适的作用”。比如说,最大池化(Max pooling)可以帮助CNN对于发生旋转、偏置和特征尺度变换的输入图像,也能够具有的鲁棒性。 + + + +## 神经网络诊断tips + +如果网络不学习(意思是:loss/accuracy在训练过程中不收敛,或者没有得到你预期的结果),尝试下面的tips: + +**1、过拟合。**如果你的模型不学习,首先应该想到模型是否陷入了过拟合情况。在一个很小的数据集上训练模型,准确率达到了100%或99.99%,或者error接近于0。如果你的神经网络不能实现过拟合,说明你的网络结构存在一些严重的问题,但也可能不是很明显。如果你的模型在小数据上过拟合,但在大数据集上任然不收敛,试一试下面的suggestion。 + +**2、减小学习速率。**模型的学习速度会变慢,但模型可以到达一个更小的局部极小值,这个点因为之前的步长过大而跳不进来。 + +**3、增大学习速率。**这可以加速模型的训练,尽快收敛,帮助模型跳出局部极小值。尽管神经网络很快就收敛了,但是其结果并不是最好的,其“收敛”得到的结果可能会及其稳定,即不同训练,得到结果差别很大。(使用Adam,我们发现0.001是一个很好的初始值)。 + +**4、减小(mini)batch size。**减小batch size至1可以得到模型参数调整最细粒度的变化,你可以在Tensorboard(或其他debugging/可视化工具)中观察到,确定梯度更新是否存在问题。 + +**5、去除batch normalization。**当你把batch size减小至1时,起初BN可以帮助你发现模型是否存在梯度爆炸或梯度消失的问题。曾经,我们有一个神经网络不收敛,仅当我们去除BN之后我们才发现模型的输入在第二个iteration是变成了NaN。BN是一种锦上添花的措施,它只有在你确定你的模型不存在其他问题时才能正常发挥其强大的功能。 + +**6、增大(mini-)batch size。**增加batch size是必须的,越大的batch size可以减小梯度更新的方差,使得每一轮的梯度更新更加准确。换句话说,梯度更新会沿着准确的方向移动。但是!我们不可能无限制的增加batch size,因为计算机的物理内存是有限的。经验证明,这一点没有之前提出的两个suggestion重要,即减小batch size和去除BN。 + +**7、检查你的reshape操作。**频繁的进行reshape操作(比如,改变图像X和Y的维度)可能会破环空间的局部特性(spatially local features),使得神经网络几乎不能准确学习,因为它们必须学习错误的reshape。(自然的features变得破碎不堪,因为CNN的卷积操作高度依赖这些自然情况下的局部空间特征)同时对多个图片/channels进行reshape操作时必须非常的小心,使用numpy.stack()进行正确的对齐。 + +**8、监视你loss函数的变化。**如果使用的时一个复杂的函数作为目标函数,尽量使用L1或L2约束去去简化它。我们发现,L1对于边界没有那么敏感,当模型遇到噪声训练数据时,模型参数调整没有那么剧烈。 + +**9、尽可能的进行模型训练可视化。**如果你有可视化的工具,如matplotlib、OpenCV、Tensorboard等等,尽量可视化网络中值得scale、clipping等得变化,并保证不同参数着色策略得一致性。 + + + +## 给出一些实际得例子 + +为了帮助你理解上面所讲得tips,我们这里给出我们构建了CNN网络,得到的一些loss得图(通过TensorBoard给出)来辅助说明。 + +首先,模型根本没有学习情况: + +![dnn_tips_01.jpg](images/dnn_tips_01.jpeg) + +我们尝试着对value进行clipping(裁剪)操作,保证它们不会超过一个固定得bounds,得到以下结果: + +然而,loss曲线仍然不够平滑。学习速率是否任然过大呢?我们又尝试对学习速率进行衰减操作,同时采用一个训练样本进行训练: + +可以发现,大约在第300和3000 steps时,学习速率的变化情况。很明显,学习速率下降太快了。所以,需要让学习速率每一次衰减的时间间隔变得更长,这样得到的结果更好: + +![dnn_tips_02.jpg](images/dnn_tips_02.jpeg) + +可以发现,在step 2000和5000的时候,进行decay,这样得到的结果更好,但也并不非常理想,loss并没有下降至0。 + +下面,我们去除掉LR衰减策略,把输入经过一个tanh函数处理,把输入数据最大最小值压缩到一个更小的范围。尽管很明显,这个操作对于小于1的值会带来一些误差,但我们人道没能实现达到过拟合的目标。 + +![dnn_tips_03.jpg](images/dnn_tips_03.jpeg) + +通过实践我们发现,去掉BN之后,在1或2个iteration之后,网络的输出就变成了NaN。我们去除了BN,同时对参数初始化策略添加方差幅度进行约束(variance scaling)。这一操作使得结果发生了巨大变化。对于几个输入训练样本,模型终于过拟合了。尽管误差值超过了5,但是最终的误差降低了4个数量级。 + +![dnn_tips_04.jpg](images/dnn_tips_04.jpeg) + +上面这张图得loss曲线非常平滑,可以发现它在测试数据上过拟合了,在训练数据上得loss曲线只是降到了0.01。这是因为没有对学习速率进行衰减操作,所以loss降不下去了。随后我们把学习速率降低了一个数量级,得到了更好得结果: + +![dnn_tips_05.jpg](images/dnn_tips_05.jpeg) + +![dnn_tips_06.jpg](images/dnn_tips_06.jpeg) + +可以发现,上面得结果更好了!但倘若只是衰减学习速率,而不把训练分为两个部分呢? + +通过给学习率每一个step都乘以一个衰减系数0.9995,得到的结果并不是很好: + +![dnn_tips_07.jpg](images/dnn_tips_07.jpeg) + +出现这种情况,可能是因为衰减过快了。因此我们把衰减系数变成0.999995,结果则更好一点,但最终的结果也基本类似,loss并没有继续减小。通过这一些列的实验,我们推测可能是因为BN掩盖了由于poor参数初始化导致的梯度爆炸问题。而且,对于Adam优化器来说,衰减学习速率并不能带来很大的帮助,除非是在训练快结束时进行deliberate的衰减。当使用BN时,对权值等value进行裁减只会掩盖真正的问题。我们同样可以使用tanh来处理具有high-variance的输入数据。 + +我们希望上面tips可以对你有所帮助,助你掌握构建深度神经网络的一些基本方法。很多时候,仅仅一些简单的操作就能导致巨大的差别。 + + + +## References + +* https://www.toutiao.com/a6611803073100644868 \ No newline at end of file