外縁部:re

学んだことのメモです: Notebook of Study

「ゼロから作る Deep Learning」 の numerical_gradient メソッドの名前空間についてのメモ

こちらの本のp 114で

...
from common.gradient import numerical_gradient

class TwoLayerNet:
    ...
    def numerical_gradient(self, x, t):
        ...
        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])

とあって、再帰呼び出しになって止まらないか…と思ったのですが止まりませんでした。

気になったのでテストして見ます。

test_module.py

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

test.py

from test_module import test_function

class TestClass(object):
    def test_function(a,b):
        c = test_function(a,b) * 4 # ここで呼ばれるのはimportした方のtest_function
        return c

print(test_function(2,3)) # => 5
print(TestClass.test_function(2,3)) # => 20

こんな感じの結果になりました。TestClass.test_functionと5行目の呼び出し部を書き換えると再帰呼び出しになります。 classでモジュールを切っているので、名前空間がそうなる理由なのかと思いますが、また時間見つけてドキュメント調査します。

「Javascript 本格入門 8-1 Ajaxとは」 サーバーサイドを Python CGI で

JavaScript本格入門 ?モダンスタイルによる基礎からAjax・jQueryまで

JavaScript本格入門 ?モダンスタイルによる基礎からAjax・jQueryまで

すっかり放っていたJavaScriptの勉強を再開、この本読んでたのですが
(9月末に改訂版出てたんですね、いい本ですが使えないAPIあったりなど古くなってた点が改良された…のでしょう)

Ajax の解説の章でphpを使うところがあって、この上phpも…と気後れしたのでPythonでさっくり書いてみました。

root/
  ├ helloAjax.html
  ├ helloAjax.html
  └ cgi-bin/
    └ helloAjax.py

と置いて、

python -m http.server --cgi

と走らせれば起動します。 どちらかいうと前段のAjaxを使用しないほう(hello.html, hello.py)を書くのが骨折れました、というかこんな書き方でいいのだろうかという。

改訂版も買いますか…

macOS Sierra で capslock をesc へ割り当てる

El Capitan までは Karabiner 使っていたのですが、アップグレードした途端に効かなくなってしまって Vim 使うのがしんどくなっちゃってました。

ただこれOSデフォルトでキーバインド変更できるようになっていたんですね…新型MacBookProさまさまのようです

  1. System Preferences
  2. Keyboard
  3. Keyboard タブから Modifier Keys
  4. Caps Lock Key への割り当てについて、プルダウンから Escape を選択、OK

これでできるようになりました(英語メニューですみません)。

便利です。

Vagrant で Ubuntu 16.04 LTS

VirtualBoxVagrantをダウンロード、インストール(Virtual Box のバージョンに注意 ) した後に、適当なディレクトリに入って

vagrant init ubuntu-16.04 https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-vagrant.box

するとVagrantファイルが作成されます。 中を覗くと

# config.vm.network "private_network", ip: "192.168.33.10"

とあるのでコメントアウト消去しホストからのアクセスIP指定。

45   # config.vm.provider "virtualbox" do |vb|
46   #   # Display the VirtualBox GUI when booting the machine 
47   #   vb.gui = true 
48   #
49   #   # Customize the amount of memory on the VM:
50   #   vb.memory = "1024"
51   # end

とあるので行頭のコメントアウト外して、立ち上げた時にGUIも起動、適当なメモリサイズもここで指定しておきます。

この50-51 行目の間に下の設定を入れる。

52     # Ajust Vagrant clock with Host one:
53     vb.customize ["setextradata", :id, "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled", 0]

前にCentOSVagrantいじっていた時に時刻がホストとずれてdockerを走らせられなかったので、時刻同期の設定を(念のため)入れておきました。

あとは

vagrant up

で自動的にイメージのダウンロードから開始されます。

しばらくするとログイン画面が別ウィンドウで立ち上がりますが、現段階ではまだパスワードがセットされていないのでログインできません。 ホストから

vagrant ssh

で、入ることができるようになります。 続きはまたこんど。

narray の要素同士の比較について

if文の条件式の中でnumpy のアレイ同士の比較をしたところ

The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

と言われました。

import numpy as np
a = np.array([1,2])
b = np.array([1,3])
if a == b:
    pass

としすると発生しました。 アレイ同士を比較すると

a == b
# array([ True, False], dtype=bool)

と要素間の比較になるため(最初の要素が1同士なのでTrue, 2番目の要素が2と3だからFalse)、真偽値が曖昧だからダメ、と怒られたようです。 これを真偽を返すようにするためには

np.all(a == b)
# False
np.any(a == b)
# True

とすればいいようです。 all()は全件一致時のみTrue, any()は1件でも一致があればTrueを返す、とのこと。

Flotr2 で棒グラフの色が同じになってしまう - JavaScriptによるデータビジュアライゼーション入門 -

JavaScriptによるデータビジュアライゼーション入門

JavaScriptによるデータビジュアライゼーション入門

を読み進めています。 人に何かを伝えようと思った時JavaScriptからは逃れられないな・・・と思った次第です(jQeuryがなんだかすらよくわかっていない)

とりあえず1章をやっていたのですが、ステップ8、棒グラフの色を別々にするところで、

「配列の入れ子構造に注意」

とあったのをすっかり見逃し

var wins2 =[[[0,28]],[[1,28]],[[2,21]],[[3,20]],[[4,19]]]; /正解
var wins2 =[[[0,28],[1,28],[2,21],[3,20],[[4,19]]]; /間違い

としてしまい小一時間悩んでおりました。系列が違うので配列も変えなければならないんですね、なるほど。