「ゼロから作るDeep Learning」

プログラミングのはじめはJavaScriptから。ある講座を通して作成したウェッブアプリは、カスタマイズして、げんざいも、じっさいに利用してる。

JavaScriptにひきつづき、げんざいはPythonをやっている。

前者はウェブサイト系に、後者は統計や機械学習に向いている。

私感では、書き方というより、それぞれの使える標準ライブラリーにより、用途が指向されている。

「ゼロから作るDeep Learning」をチュートリアルしている。

本書は、オライリー・ジャパンにとって、ベストセラーらしい。

DeepLearingは、おもったとおり、むつかしい。目標は、基礎的なことの習得にあるのだけれど、それでも、やはり、むつかしい。

本書を進めるうえで助けになっているのは、チュートリアルがpythonで書かれていることだ。

著者は、オライリー・ジャパンの、他のpythonの書籍も翻訳しているようだ。「みんぱい」(みんなのパイソン)の著者と、本書の著者は、日本で屈指のパイソンの先生である、と勝手に決めている。

本書に記載されているコードを、じっさいJuputer Notebookで確かめていて、「あ、きれいなコードだなぁ」と思ったりもしている(そういう経験は、初めてだったんだ)。

クラス

関数の引数に関数を入れてみよう。

def func1(f,x,y):
return f(x,y)

def func2(x,y):
return x+y

func1(func2,2,3)

5

次に、クラスで同様のアウトプットを得る。

class count:
def __init__(f,x,y):
f.x=x
f.y=y

def add(f):
return f.x+f.y

result=count(2,3)

result.add()

5

こう書いてみると、クラスは、じぶん自身の引数に、じぶん自身を入れている感じ。おもしろいわぁ。

コールバック関数

コールバック関数、1年前よりは理解できてる〜

def func():
print(‘ピアノは思い出す’ )

def apply(callback):
callback()
print(‘カンナの赤と’)

apply(func)

ピアノは思い出す
カンナの赤と

◎引数を入れたばあい

def add(a,b):
return a+b

def apply(callback,a,b):
return callback(a,b)

apply(add,1,2)

かんちがいしていた点。コールバック関数は受け入れ”られる”側の方を指している。受けいる方は、高階関数という(いままで、こちらをコールバック関数と呼ぶものと、おもっていた)

sys.path.append( )

pythonのsys.pathの立ち居振る舞いを探ってみた。

1)作業ディレクトリをつくる(「testPython」とした)

2)その中にファイルをつくる(「path_test.py」とした)

3)そのファイルに、かんたんな関数を書き込む。

def a ( ) :
print(‘pathのテストだよー’)

4)ここから、ターミナルの作業にうつる。

5)python

6)>>>import path_test
 
エラー表示
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
ModuleNotFoundError: No module named ‘path_test’

7)>>>sys.path.append(‘testPython’)

8)>>>import path_test
こんどはインポートできた。

9) >>> path_test.a( )
sys.path.appendのテストだよ〜

◎コマンドラインで、あらたにファイルを読み込むばあい、sys.path.append( )により、上位の(ファイルの入ったフォルダの)名前を引数に入れなければならない。

 

理解の補助線を引く

pythonのオブジェクトについては、そのチュートリアルで解説されている。

くわしい人は、参考ていどに、サッとみれるだろう。

しかし、くわしくない人(オレ)にとっては、なかなか、意味をとらえることはできない。

あるいは、英語のチュートリアルが日本語に訳されているので、わかりにくいのかもしれない。

いずれにせよ、そうなると、じぶんで補助線を引きながら理解する必要がでてくる。

ここでいう補助線とは、知識がないなりに、理解できる範囲にその内容を引き込んでいく作業だ。

そもそも、いま書いているこのブログというのは、その補助線をまとめている側面がある。

まとめること、そして、後日、検索することもある。

検索した文を読んでみて、すぐに頭に入ってこないことも多々ある。じぶんが書いたのにねぇ。

合理性について

トランプの交渉の手法は、わかりやすいとおもう。

相手の弱味を最大限利用している。

ただし、これは相手が合理的に動くことが前提となっている。

合理的とは、簡単にいえば、損をするか得をするかである。

コッポラーの「ゴット・ファザー」が好きだ。

イタリアからの移民が船上で自由の女神を見上げる、シリーズ2の場面は、なんど観ても感動する。

マイケル・コルレオーネは、取引でキューバに行くでしょう。

その道中で、警察の取り調べから逃げ、車に籠城して自爆する男を見る。マイケルは、ひょっとしたら、この国の革命は実現するとおもう。

合理的でない行動は、なにも映画だけじゃない。7、80年前の日本自身はどうよ。だって戦闘機で単身、軍艦に突っ込んだり、片道だけの燃料を積んで戦艦大和が沖縄に向かったりしたんだよ..ね?

げんざいトランプは各国にブラフをかけている。

とくに話題になっているのは、中国とイランだ。

一方は隋や唐、一方はペルシャという、かつて世界の中心を経験した地域である。

そもそも合理性とは、イギリスのある地域の価値観で、それが時間をかけて世界に広がっていった経緯がある。その当時は(「ロビンソン・クルーソ」が書かれたくらいの時期は)まだ、出たとこ勝負の行動が大勢だったらしいですねぇ。

要は、合理性は普遍的というわけでもなさそうで。

ndarrayオブジェクト

pythonで、まず2つのリストをつくる
a=[1,2,3]
b=[4,5,6]

aとbを掛けることが、できるのか。
print(a*b)

エラーになってしまう。
TypeErrorTraceback (most recent call last)
in ()
—-> 1 type(a*b)
TypeError: can’t multiply sequence by non-int of type ‘list’

ndarrayオブジェクトにリストを入れてみる。
import numpy as np
c=np.array([1,2,3])
d=np.array([4,5,6])

cとdを掛けることが、できるのか。
print(c*d)
[ 4 10 18]

OK〜

次に
e=c*dとする

print(e)
[ 4 10 18]

ndarrayオブジェクトには、型、次元数、サイズを調べるメソッド(アトリビュート?)が用意されている。


e.shape
(3,)

次元数
e.ndim
1

サイズ(要素数)
e.size
3

サイズ(要素数)は分かるが、e.shape(3,)と、e.ndim 1について、理解できない。

f=np.array([[1,2,3],[4,5,6]])としてみる。
print(f)
[[1 2 3]
[4 5 6]]

f.shape
(2, 3)

f.ndim
2

f.shape
(2,3)
は、
2列3行(2×3)が表現されている。

1行3列のようだ。ということで、先の(3,)は3列1行のようだ。(3,1)とは表現されないんだネ。           

=>(1,3)とは表現されず、1が省かれ(3,)と表現      

f.ndimは2次元。

[ 4 10 18] — 1次元

[[1 2 3]
[4 5 6]] — 2次元

では、
[[1,2,3]
[4,5,6]
[7,8,9」]
のような形を3次元と言うのか。

じっさいに、つくってみよう。

g=np.array([[1,2,3],[4,5,6],[7,8,9]])
g.ndim
2

お、2次元だ。

では、3次元とは..ググって、しらべてみたわ〜

h=np.array([[[1,2,3],[4,5,6],[7,8,9]],[[1,2,3],[4,5,6],[7,8,9]]])

print(h)

[[[1 2 3]
[4 5 6]
[7 8 9]]

[[1 2 3]
[4 5 6]
[7 8 9]]]

h.ndim

3

お〜、3次元〜 

dir()関数

pythonでクラスをつくる。アトリビュートの概念がわかってくる。文を読むだけでなく、手を動かすことで初めて分かる収穫だと思う。

「もしかしたら、メソッドもアトリビュートではないか」と思ったり、dir()でオブジェクトのアトリビュート一覧が見れるのは痛快だ。

1や”a”のような値がオブジェクトであるのは知っていた。さらにdir()にて、そのアトリビュートが一覧できたのは、ちょっとした感動〜。

for文の動き

pythonのfor文の動きを、たしかめてみた。たぶん、これでいいとおもう。

arr=[1,2,3]
for i in arr:
print(i)
1
2
3

この動きを、たしかめたい。

j=iter([1,2,3])
next(j)
1
next(j)
2
next(j)
3
next(j)
StopIteration: //例外処理が行われ、ここで動作がストップする。

取材について

オッケー、取材について、かんがえてみようか。

ぼくは旧いので、しらずしらず、取材と媒体がくっついている。媒体は一般的な言葉ではないだろうか。要は、新聞や雑誌のことだ。

ちなみにウェッブサイトは、あまり媒体のような気がしない。たとえばフェイスブックなどは、プラットフォームでしょう。

やはり、ウェッブサイトは革新的だったんだ。

調べたいことをキーワードで検索すれば、関連したウェッブサイトの一覧が表示される。(別に順番でなくても良いけれど)それを順番に読んでいけば、知りたい情報を収集できる。

読みながらノートをとっていけば、取材なのである。人に話しをうかがうか、ウェッブに耳を澄ますかの違いだけだ。

そう思うと、従来の媒体に依存した取材は狭い感じさえしてくる。ウェッブを読むのも取材だし、(媒体に載せる目的もなく)人と話すのも取材なわけで。要は、取材を目的にするのは、もはや有効ではないんだね。なにかを知りたい手段という。ただ、それだけ。