Saturday, July 28, 2018

ゼロから作るDeep Learningを読んで その2

前回からオライリージャパンのゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装を読み続けています。
今回はサンプルコードの実行途中で躓いた点を書いておきます。

各サンプルコードはその章のディレクトリで実行することになっています。
例えば、7章であれば以下のような場所になります。

~/deep-learning-from-scratch-master/ch07

共通のモジュールはその上層のディレクトリにあるので、以下のようにパスを通します。

import sys, os
sys.path.append(os.pardir)
from common.util import im2col

しかし、これではパスが通っていないのかim2colをimportできませんでした。
そこでいろいろ調べたところ、以下のようにやるとうまくいきました。

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)))

これで、ちゃんと上のディレクトリが追加されました。
sys.pathをプリントすればパスが通っているか確認できます。

print(sys.path)


以上が私が詰まった部分です。
また、他におかしいところがあればブログに書きたいと思います。

  

Tuesday, July 10, 2018

ゼロから作るDeep Learningを読んで その1

オライリージャパンのゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装を読み始めました。 
まだ途中ですが、できる限り平易な文章で書いてあるので読みやすいです。
Pythonを使って実装するので、ちょこちょこ実装しながら確認できるのがよいです。
やりながら詰まったところがあるので、メモ代わりに書いておきます。

4章 ニューラルネットワークの学習

4.2.3 ミニバッチ学習


ここで、以下のような訓練データからを読みだすスクリプトを実行します。

import sys, os
sys.path.append(os.pardir)
import numpy as np
from dataset.mnist import load_mnist

(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, one_hot_label=True)

print(x_train.shape)
print(t_train.shape)
すると、以下のようにエラーが発生します。
Traceback (most recent call last):
  File "", line 1, in 
  File "../dataset/mnist.py", line 117, in load_mnist
    dataset['train_label'] = _change_ont_hot_label(dataset['train_label'])
NameError: name '_change_ont_hot_label' is not defined

これはmnist.pyの中に原因があるようです。
mnist.pyは以下の場所にあります。

/deep-learning-from-scratch-master/dataset

117行目のエラー箇所を見に行くと、_change_ont_hot_labelという関数を呼び出しています。
これが未定義なようです。
どうも単語がおかしいのですが、該当する関数が定義されてないかファイルを読んでみます。

    if one_hot_label:
        dataset['train_label'] = _change_ont_hot_label(dataset['train_label'])
        dataset['test_label'] = _change_ont_hot_label(dataset['test_label'])


すると、82行目に以下のような関数を見つけました。 やはり単純なタイポのようです。

def _change_one_hot_label(X):
    T = np.zeros((X.size, 10))
    for idx, row in enumerate(T):
        row[X[idx]] = 1

    return T

つまり、117、118行目を以下のように修正すれば無事に動きます。

    if one_hot_label:
        dataset['train_label'] = _change_one_hot_label(dataset['train_label'])
        dataset['test_label'] = _change_one_hot_label(dataset['test_label'])


以上が私が詰まった部分です。
また、他におかしいところがあればブログに書きたいと思います。