社畜エンジニア発掘戦線

駆けだしAIエンジニア

関数の外部モジュール化

おつかれさまです。

これからCNN(畳み込みニューラルネットワーク)にいろいろとトライしていこうとしていますが、少し問題があります。それは、アルゴリズムが複雑で、コードに落とすとめちゃめちゃ長くなる、ということです。ダラダラと長く書かれたコードは可読性が下がり、「あ〜あのパラメータどこに書いたっけな〜」と無駄な時間を過ごしてしまいがちになります。

この解決策はいろいろあるのかもしれませんが、とりあえず処理を関数でモジュール化してしまう方法をトライしてみたいと思います。

やりたいこと

関数の部分を別のPythonファイルに書いてしまって、そこから使いたい関数をインポートする、ということをしてみたいと思います。Pythonの関数というと、def〜でまとまる処理の部分です。これまでだとsigmoid関数やloss関数の処理に使っていました。

f:id:sutokun:20190505085904j:plain:w500

やり方

同じフォルダに2つのPythonファイルを入れて、インポートしたい関数の書いたファイル名をimportで書けばできます、意外と簡単。

とりあえずやってみましょう、「function.py」と「test.py」というファイルを「function_test」というフォルダに突っ込みます。

f:id:sutokun:20190505091126p:plain:w500

function.pyには2次曲線の関数を定義してみます。

def math(x):
    return x**2

続いてtest.pyを書いていきます。

import function

x = 2
y = function.math(x)

print(y)

インポートするのは関数を定義しているファイルの名前で、「ファイル名.関数名()」で使えるようです。ターミナルでtest.pyを実行すると「4」という結果が返ってきました、うまくいってそうです。ファイルを実行後、フォルダに新たなファイルが作成されます。

f:id:sutokun:20190505113208p:plain:w500

あんまりよく分からないんですが、外部ファイルのインポートに関するファイルなんでしょう(勉強不足)。


この方法を使えば複雑な処理をファイルの外に出すことができるので、ニューラルネットワークの本質的な記述だけを書くことができます。兎にも角にも、練習がてらにこれまでのファイルを外部モジュールを使って書き直してみたいと思います。

※これは同じフォルダに2つのファイルが入っていないと実行できません。フォルダの階層を変えたり、全く別のフォルダに関数のファイルを置くにはまた別の処理が必要になります。