意識低い系お菓子作り
アドベントカレンダー10日目です。
今日は意識低めのお菓子作りについて書いていきたいと思います。
これを書こうと思った理由
お菓子作りは少しハードルが高く見えるせいで、お菓子作りするひとが少ないのかな?
そうだったら、意識低めのお菓子作りの記事を書くことでお菓子作りをする人が増えればなあということです。
必要な材料
パウンドケーキミックスの袋いわく、必要材料は以下のものです。
- パウンドケーキの型
- この粉
- 卵 一個
- 無塩バター 60g
普通にイメージするのは金属の型ですが、高いうえに普通はそこまで使いません。100円ショップはお菓子を作る人には素晴らしい店なので、紙のパウンドケーキの型が売ってます。これを使いましょう。
無塩バターがあると風味がよくなりますが、まあまあの値段です。200gで400円とか。無塩のマーガリンを使うと、バターの風味自体はなくなりますが、半額くらいで買えます。適当な油とかを使うと風味はそこまでよくないですが、最初から液体だし安いので楽です。今回はオリーブ油を使います。
必要な道具
今回必要なのはこれくらいだと思います。
- はかり
- ボウル
- ゴムベラ
- 泡立て器
今回は、油の計量に使います。はかりは1gから計れるものがおすすめです。電子はかりがとても便利ですが、人によってはもっていないと思います。そういう場合には計量スプーンを代わりに使うことが出来ます。計量スプーンでの換算サイトがあるので、これを使いましょう。計量スプーンすらない場合には、100均で買いましょう。
www.benricho.org
ボウルは好みですが、金属で深いものが好きです。なんも考えずバター入れたりして、後から溶かしていれなくちゃいけないのに気づいたときに湯煎でなんとかできたりします。
ゴムベラは無いと死にます。100均で買いましょう。先端が取り外せないものがおすすめです。
泡立て器もないと死にます。100均で買いましょう。
材料と道具を並べるとこんな感じです。実家だと大抵ありそうですね。
製作工程
まず卵をほぐします。めんどいので泡立て器で。
次に、バターを入れます。高いので油にしました。
まぜたらカスタードクリームみたいになりました。
型にバターを塗ります。高いので油です。スプーンで適当に塗ります。もし塗らないと焼いたときに張り付いたりします。
ゴムベラで入れます。こういうときに極めて便利。
なんか汚いですがこんなもんです。表面ならしてもいいですが、めんどいのでしません。
天板に乗せて焼きます。予熱は流石にしましょう。オーブンがないと戦えません。
できました。なんかしらないけど結構膨らみましたね。
紙の型を使う利点として、洗い物が減る、型からの取り外しが簡単、このまま包丁で切れるなどがあります。
食べてみての感想
少しオリーブ油の匂いがしますが、まあまあ美味しいです。マーガリンを使ったら間違いなく普通に美味しいですね。
chainerのto_cpuについて
アドベントカレンダー9日目です。
adventar.org
今日はchainerのmodel.to_cpuについて書いていきます。
to_cpuについて
chainerで学習する際には、ネットワークを定義した後、モデルをto_gpuすると思います。これによりGPUで処理をすることができるからです。対して、to_cpuはどのような場面で使うかというと、学習後のモデルを保存する際に使用したりします。
model.to_cpu()
chainer.serializers.save_npz("model.npz", model)
to_cpuのメリットは?
to_cpuを使うことによるメリットとして、cpuで処理をすることができることです。学習後のモデルを使って、webサービスか何かに使うときには、貧弱なサーバーではGPUを使えないことがあります。そういうときには、to_cpuしたモデルを使ってCPUのみで処理するのがいいかなと思います。
to_cpuの注意点
学習ループ中に、model.to_cpuしてそのままだとエラーを吐きます。そういうときの正しい対処法はわかりませんが、とりあえずto_gpuすることでエラーを吐かずに走り続けます。
まとめ
弱いパソコンで試すときや、予測だけするときにto_cpuを使うと便利かも知れません。
chainer以外でのcupyの使用について
アドベントカレンダー8日目です。
今日はcupyについて書いていきたいと思います。
速度比較
今回は、0~300000000までの配列を生成し、それをシグモイド関数に通します。その時の速度を以下の3つで比較します。
- pythonのrangeとmath.exp
def sigmoid(x): temp = x.copy() for i,x in enumerate(x): temp[i] = 1/(1+math.exp(-x)) return temp start = time.time() x = list(range(300000000)) sigmoid(x) print(time.time()-start)
- numpyのarangeとnp.exp
def numpy_sigmoid(x): return 1/(1+np.exp(-x)) start = time.time() x = np.arange(300000000) numpy_sigmoid(x) print(time.time()-start)
- cupyのarangeとcupy.exp
def cupy_sigmoid(x): return 1/(1+xp.exp(-x)) start = time.time() x = xp.arange(300000000) numpy_sigmoid(x) print(time.time()-start)
実行結果
何秒かかったか以下に示します。
80.69074440002441
- numpy
5.5577309131622314
- cupy
0.0005419254302978516
numpyを使うことでかなり早くなってますね。
cupyは異次元です*2。
jupyter notebookのextensionのgist-itについて
アドベントカレンダー7日目の内容です。
今回は、jupyter notebookのextesionにあるgist-itについて書いていきます。
Jupyter notebook extensionsについて
jupyter notebookの拡張機能です。
ソースコードを畳めたり、autopepが使えたりします。
インストールはこちらから。
github.com
gist-it
あっという間にgistにソースコードを上げられます。
githubよりも気軽に、ブログにソースコードを埋め込むときにも使いやすいです。
前回の記事でのソースコード埋め込みにも使用しています。
jupyter notebookのextesionsで有効化すると、ここにボタンが出ます。
gistへの上げ方
さっきのボタンをクリックすると、こんな感じの画面が出ます。
よくわからなければ、何も入力せずに右下のGist itを押しましょう。
するとこんな緑の表示が出るので、リンクをクリックしましょう。
リンクに飛ぶとこんな感じで公開されています。
ブログへの貼り方
ブログに貼りたい際には、先程の画像の右上のEmbedのところをコピーしてブログにそのまま貼ります。
こんな感じに表示されます。
楽にコードを共有できて、jupyterを使っててブログを書くときには便利なのでおすすめです。
matplotlibで円グラフを描画する
アドベントカレンダー6日目です。
adventar.org
matplotlibで円グラフを描画する
pythonで円グラフを描画したくて、matplotlibを使いました。
その際にいろいろいじって試したりしたのでそれについて書きます。
ソースコードは以下にあります。
描画の準備
使うライブラリのimport
%matplotlib inline import matplotlib.pyplot as plt import numpy as np from collections import Counter
データの準備
1000までの乱数を生成し、それを10倍し、int型に変換することで0~10の整数を1000個作成します。
ary = np.random.rand(1000) ary *= 10 ary = ary.astype(int)
数値の出現回数を数え、それを出現回数順に並び替えます。
count = Counter(ary) ranked_data = count.most_common()
ラベルとデータを切り分けます。
labels = [x[0] for x in ranked_data] values = [x[1] for x in ranked_data]
ここまでがデータの準備でした。
使用した機能
- plt.axis('equal')
図が楕円になるのを真円に直す
- plt.figure(figsize=(5,5), dpi=100)
図のサイズを指定、dpiを変える
- plt.title('pie')
図のタイトルを指定
- plt.savefig("pie.png",bbox_inches='tight')
図の保存、きれいにできるようにする
- plt.subplots_adjust(left=0, right=1.2)
凡例を作るためのスペース作成
- plt.pie(values, startangle=90, counterclock=False, autopct='%.1f%%', pctdistance=1.15)
円グラフのスタート位置を指定、データを大きい順に、割合表示、割合の表示位置指定
まとめ
円グラフも描画するだけなら一瞬ですが、きれいに描画するのは色々大変です
gitlabのissue templatesについて
アドベントカレンダー五日目です。
adventar.org
今日はgitlabのissue templatesについて書いていきます。
issue templatesについて
issue templateがあると、templateを選択してissueを書くことが出来ます。
今回はBugというテンプレートを追加しました。
選択するとテンプレートがDescriptionに表示されます。
issue templatesの追加方法
まず、トップディレクトリに .gitlab/issue_templates を作成します。
あとは、テンプレートの名前を決めてmdファイルを作成し、
中身をマークダウンで記述、コミットするだけでそれ以降テンプレートが選択できるようになります。
まとめ
とても簡易にissueのテンプレートを作成できて、
issueが見やすくなるのでお薦めです。
scikit-learnのconfusion matrixとclassification reportについて
アドベントカレンダー四日目です。
昨日に引き続き、scikit-learnの話をしていきましょう。
confusion matrix
必要なライブラリのimport
前回同様numpyと、
訓練データとテストデータを分ける train_test_split、
学習に使うデータの load_digits、
SVM、
新たにconfusion matrixとclassification reportを読み込みます。
import numpy as np from sklearn.cross_validation import train_test_split from sklearn.datasets import load_digits from sklearn import svm from sklearn.metrics import confusion_matrix from sklearn.metrics import classification_report
データの取得と分割
同じ流れですが、学習に使うデータを読み込み、次にデータを分割します。
digits.dataでデータが、digits.targetでラベルがとれます。
digits = load_digits() X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target)
学習と評価
とりあえず学習します。
clf = svm.SVC(kernel='linear')
clf.fit(X_train, y_train)
そして、未知データを分類します。
predict_label = clf.predict(X_test)
confusion matrixの表示
confusion matrixを表示します。
これを見ることで、正しいラベルにどれくらい分類されたかが確認できます。
こちらのサイトが参考になるので見てみてください。
混同行列(Confusion Matrix)
print(confusion_matrix(predict_label, y_test)) [[40 0 0 0 0 0 1 0 0 0] [ 0 39 0 0 0 0 0 0 2 0] [ 0 0 47 0 0 0 0 0 0 0] [ 0 0 0 45 0 0 0 0 0 0] [ 0 0 0 0 44 0 0 2 0 0] [ 0 0 0 1 0 42 0 0 0 0] [ 0 0 0 0 0 0 43 0 0 0] [ 0 0 0 0 0 0 0 42 0 0] [ 0 3 0 1 0 0 0 0 53 2] [ 0 0 0 1 0 1 0 1 1 39]]
classification report
今度はclassification reportをみてみましょう。
予測結果の評価に使います。
F値 - 機械学習の「朱鷺の杜Wiki」
print(classification_report(predict_label, y_test)) precision recall f1-score support 0 1.00 0.98 0.99 41 1 0.93 0.95 0.94 41 2 1.00 1.00 1.00 47 3 0.94 1.00 0.97 45 4 1.00 0.96 0.98 46 5 0.98 0.98 0.98 43 6 0.98 1.00 0.99 43 7 0.93 1.00 0.97 42 8 0.95 0.90 0.92 59 9 0.95 0.91 0.93 43 avg / total 0.96 0.96 0.96 450
まとめ
いい感じの関数がscikit-learnだと一瞬で使えてすごいですね。
今度はこれを図で描画したいですね。