PycharmでJupyter(IPython)からの自作モジュールimportがImportError: No module named *** と出た時の対処法
現象
Pycharm上でJupyter Notebook(IPythonでも同じ現象がでるのでしょうか?)を起動して、自作のモジュールをimportしたときに以下のエラーが発生し、importできませんでした。
visualsというのが自作のモジュール。
実行したipynbファイルと同じディレクトリにvisuals.pyとして保存されている状態です。
対処法
前回と同様に公式にメールで問い合わせた結果、Jupyterにワークスペースを設定してあげる必要があるとの事です。これで無事importが認識されました!
メニューバーの[File]>[Settings]から[Language&Frameworks]>[Jupyter Notebook]に入ると、Working directoryがあるので、そこにipynbファイルのパスを入力します。
ちなみにWorking directoryはJupyter Notebookをどこのディレクトリ上で起動するかという設定との事です。
この設定がされていなかったのでJupyterがほかのディレクトリで起動しおり、visualsの場所がわからず、importができなかったという事でした。この設定はプロジェクトを変えた場合にそのパスを再設定する必要があります。
また、余談ですが、Pycharmにはsource rootという概念も用意されているようです。
Source rootとして設定したディレクトリはPycharm上でのimport読み込み対象ディレクトリとなります。
sys.path.append()のようなimportのpath設定のことでしょうか。
設定方法はプロジェクトエクスプローラから対象のディレクトリ、ファイルを右クリックしてset as source rootを選択するだけです。
PyCharm 2016.3 Help :: Content Root
一応確認中なのでわかったら追記します。
(2016.12.9)追記しました
最低限のニューラルネットワークの実装で原理を理解する
背景
もはや言わずもがなですが、Deep Learning、来てますよね。
ですが、その原理を学習しようと思った場合に、全くの素人が本当の意味での第一歩から勉強したいと思った時に、
レベルに見合ったサンプルコードを見かけることができません。
というか、私がそうでした。
MNISTとか、代表的なサンプルはありますし、動きもなんとなくわかるんですが、
具体的に裏でどう動いているのかというところが一発で分かるようなものはありませんでした。
今回、最低限のニューラルネットワーク(というかニューロン)を用意して、その挙動について説明を入れて、その原理をまとめます。
(今回の記事は次の記事を参考に作成しております)
Neural networks and deep learning
やったこと
ニューラルネットというより一つのニューロンを用意します。
入力は1固定で、出力が0になるように学習させます。
今回、ニューロンの活性関数にはシグモイド関数を用いました。
一般的なNNの話ですが、シグモイドの変数は
y = weight * x + bias
としています。
結果
横軸が学習回数、縦軸が出力値です。
学習を進めると出力値が0に近づいていることがわかると思います。
学習回数は50回です
考察
今回1つのニューロンに学習させましたが、weightとbiasについて少しわからないところがありました。
以下に示すようにアップデートされていきましたが、どこかで収束するような気配がありません。
両者の絶対値が完全に一致したら収束するのかもしれませんが、
みた感じ収束する気配がありません。
ただ、もっとイテレーション回すと出力は0に近づくのでそういうものなのかもしれません。
サンプルコード
python:2.7.10
# -*- coding: utf-8 -*- import math import random # cost function of cross entropy def fun(a): return -math.log(1 - a) # differential of fun def dfun(a): return 1 / (1 - a) # sigmoid function def sigmoid(x): return 1 / (1 + math.exp(-x)) eta = 0.15 weight = random.random() bias = random.random() epoch = 0 maxEpoch = 50 print 'out, delta, weight, bias' for i in range(maxEpoch): # calculate sigmoid function by current parameter a = sigmoid(weight + bias) # get value of difference delta = dfun(a) # update parameters by delta and eta, eta is learning rate weight += -eta * delta bias += -eta * delta print str(sigmoid(weight + bias)) + ', ' + str(delta) + ', ' + str(weight) + ', ' + str(bias)
Dell XPS studio 8100にNvidia GeForce GTX 960を換装した結果
私が使っているXPS8100は2009年ぐらいに買ったDellのミドルタワーデスクトップPCです。
もう7年も愛用してますがこれまで大きな不調もなく、まだまだ現役で使えます。
ところが利用していたGPUのNvidia GeForce GTX 260ではCUDA7.5が使えない事が判明しました。
そこで新しいもの購入を検討していたところ、ちょうどGTX960のタイムセールがアマゾンでやっていてついポチッと買ってしまいました。
実はいくら情報探してもこの組み合わせで動いた報告がなかったのでちゃんと動くか不安でした。
が、結果から言うと問題なく動きました
nvsimの結果
+------------------------------------------------------+ | NVIDIA-SMI 361.75 Driver Version: 361.75 | |-------------------------------+----------------------+----------------------+ | GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GTX 960 WDDM | 0000:01:00.0 On | N/A | | 30% 43C P8 12W / 130W | 261MiB / 2048MiB | 0% Default | +-------------------------------+----------------------+----------------------+
換装、ドライバインストール等で特につまづいたところはありませんでした。
ただし、私の環境では電源を500Wに増設しているので、出荷時備え付けの電源だと出力が足りないかもしれません。確認してから購入を検討下さい。
あと、PCの中は特にCPUの放熱フィンとファンがホコリまみれだったのでサイバークリーンを使って取り除きました。
ゲル状になっているので放熱フィンとかファンの隙間に入ったホコリも吸着できてかなり綺麗になりました。オススメです。
Python sqlite3のjournal Modeを変更する方法
以下で変更できるようです。
まずコネクトして、
conn = sqlite3.connect(_name, isolation_level=None)
PRGMAを使ってjournal_mode=***に所望のmodeを設定すればOKです。
(今回はMemoryしました。)
conn.execute("PRAGMA journal_mode=MEMORY")
ちなみにconnect時のisolation_levelは自動コミット有効/無効(=None/の切り替えとの事です。
MacでCaffe(DeepLeaningフレームワーク)の立ちあげ方
経緯
我が家のMac環境にDeepLearning用フレームワークであるcaffeをインストールしようとした時の話。
公式では、Caffeの特徴を以下のようにうたっています。
・アーキテクチャが良い(Cpu/Gpuモードの切り替えが簡単
・コードの拡張性が高い(多くの開発者が参加しているから
・処理が早い(シングルNVIDIA K40 GPU上で1日当たり6千万枚?の画像を処理できる
・コミュニティがある
今回、私がCaffeを選んだ理由は日本語ネイティブの辛い所ではありますが、日本語のオライリー本がある所でした。
O'Reilly Japan - Caffeをはじめよう
やった事
まず、公式のgithubレポジトリからpullリクエストを行い、caffeのコードをローカル環境に持ってきました。
BVLC/caffe · GitHub
実際には私の環境ではgithub desktopを使ってpullしました。
次に、これをビルドして使えるようにする必要があります。
手順はまずは公式サイトのインストール項を参照しました。
Caffe | Installation
GPUモードもあるようですが、CUDAの設定もやらないといけなくなるので色々面倒だと思い、CPUのみのモードでやります。
CPUのみのモードだとmakefile.configの中身の編集が必要とのことでした。
CPU-only Caffe: for cold-brewed CPU-only Caffe uncomment the CPU_ONLY := 1 flag in Makefile.config to configure and build Caffe without CUDA. This is helpful for cloud or cluster deployment.
本日時点では8行目ぐらい?にある設定の頭に「#」があるのでそれを削除してuncommentしました。
これでいけるかなと思いまして、
cd caffe make all
でビルド
(caffeの場所はpullした場所によるので各自の環境でmake実行する必要があります)
PROTOC src/caffe/proto/caffe.proto make: protoc: No such file or directory make: *** [.build_release/src/caffe/proto/caffe.pb.cc] Error 1
ダメでした。
読むとgoogle protocolが無いのでダメですとのこと。
今回、homebrew環境からgoogle protocolをインストールしました。
その手順はこちらの記事を参照ください。
Mac環境にHomebrew経由でGoogle Protocolをインストールする - ろむめも
で、protocを仕入れて再度make all
🍺 /usr/local/Cellar/protobuf/2.6.1: 118 files, 7.1M PROTOC src/caffe/proto/caffe.proto CXX .build_release/src/caffe/proto/caffe.pb.cc CXX src/caffe/blob.cpp In file included from src/caffe/blob.cpp:4: In file included from ./include/caffe/blob.hpp:8: ./include/caffe/common.hpp:4:10: fatal error: 'boost/shared_ptr.hpp' file not found #include <boost/shared_ptr.hpp> ^ 1 error generated. make: *** [.build_release/src/caffe/blob.o] Error 1
boostが無いって言ってる。
こんな感じで無いものをhomebrewで
brew install **
しながら環境構築していきました。
私の環境でインストールが必要だったものは以下です。
brew install snappy leveldb gflags glog szip lmdb brew install boost brew install home-brew/science/opencv brew install hdf5 brew install openblas
brewの不足品は以下のサイトを参考にしながらinstallしました。
CaffeをOS X 10.10 にインストールした // ichyo.jp
CaffeをCPU ModeでMac OS X 10.10に入れる手順 - Qiita
ただ、私の環境では上記サイトにあるようなboostバージョンによるエラーは出ませんでした。
また、余談ですがbrewしている過程で、以下のメッセージが出ました。
GitHubを特定の時間内で使いまくるとこうなるんでしょうか。
個人用tokenを作ってそれ使って下さいって言ってますが、今回は無視しましたが問題なくインストールできました。
Error: GitHub API rate limit exceeded for IPアドレス (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.) Try again in 4 minutes 45 seconds, or create a personal access token: https://github.com/settings/tokens/new?scopes=&description=Homebrew and then set the token as: HOMEBREW_GITHUB_API_TOKEN
また、opencvのインストール時に以下のメッセージが出ましたが、これも無視しました。
Warning: homebrew/science/opencv dependency gcc was built with a different C++ standard library (libstdc++ from clang). This may cause problems at runtime. ==> Caveats Python modules have been installed and Homebrew's site-packages is not in your Python sys.path, so you will not be able to import the modules this formula installed. If you plan to develop with these modules, please run: mkdir -p /Users/note/.local/lib/python2.7/site-packages echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/note/.local/lib/python2.7/site-packages/homebrew.pth
とにかく早く環境立ちあげたかったので、あとで問題あれば対処という方向付けにしました。
必要なパッケージのインストールが完了したので無事
make all
でcaffeのビルドができました。
caffeはビルド後のテストを行うことができるようです。
これにクリアすればビルドが問題なくできた事が確認できます。
早速、
make test make runtest
とすると、
[----------] Global test environment tear-down [==========] 927 tests from 140 test cases ran. (57201 ms total) [ PASSED ] 927 tests.
で問題なくインストールできている事が確認できました。
Mac環境にHomebrew経由でパッケージをインストールする
経緯
mac環境にGoogle ProtocolをHomebrewでインストールしようとした時の話です。
後で別の記事に書きますが、もともとはCaffeをインストールしたかったのですが、
その過程で、後述の通りグーグルプロトコルのインストールを行いました。
他のパッケージもこれと同じようにインストールできます
やった事
久しぶりにHomebrewを立ち上げたのでまずは環境の検証から。
brew doctor
すると
Warning: Your Homebrew is outdated. You haven't updated for at least 24 hours, this is a long time in brewland! To update Homebrew, run `brew update`.
バージョンが古いということなので
brew update
でアップデート実行。
ところが、
error: unable to unlink old '.gitignore' (Permission denied) error: unable to create file .travis.yml (Permission denied) error: unable to create file .yardopts (Permission denied) error: unable to unlink old 'CODEOFCONDUCT.md' (Permission denied) error: unable to unlink old 'CONTRIBUTING.md' (Permission denied) error: unable to unlink old 'LICENSE.txt' (Permission denied) error: unable to unlink old 'README.md' (Permission denied) error: unable to unlink old 'SUPPORTERS.md' (Permission denied) Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master
と表示されアップデートできませんでした。
homebrewのupdateが失敗した時 - まめ畑
の記事を発見し、書かれているように実行
cd `brew --prefix`
git remote add origin https://github.com/mxcl/homebrew.git fatal: remote origin already exists.
git fetch origin remote: Counting objects: 10, done. remote: Compressing objects: 100% (10/10), done. remote: Total 10 (delta 4), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (10/10), done. From https://github.com/Homebrew/homebrew ed46a0a..1e6d9b9 master -> origin/master
git reset --hard origin/master warning: unable to unlink Library/ENV/pkgconfig/10.9: Operation not permitted error: unable to unlink old '.gitignore' (Permission denied) error: unable to create file .travis.yml (Permission denied) error: unable to create file .yardopts (Permission denied) error: unable to unlink old 'CODEOFCONDUCT.md' (Permission denied) error: unable to unlink old 'CONTRIBUTING.md' (Permission denied) error: unable to unlink old 'LICENSE.txt' (Permission denied) error: unable to unlink old 'README.md' (Permission denied) error: unable to unlink old 'SUPPORTERS.md' (Permission denied) fatal: Could not reset index file to revision 'origin/master'.
brew update Error: The /usr/local directory is not writable. Even if this directory was writable when you installed Homebrew, other software may change permissions on this directory. Some versions of the "InstantOn" component of Airfoil or running Cocktail cleanup/optimizations are known to do this. You should probably change the ownership and permissions of /usr/local back to your user account. sudo chown -R $(whoami):admin /usr/local
これでもダメのようでしたが、よく読むとpermissionの問題を指摘されていました。
そこで、ログインしているアカウントにアクセス件を与えて、
sudo chown -R $(whoami):admin /user/local chown: /user/local: No such file or directory sudo chown -R $(whoami):admin /usr/local
これでホームブリューのアップデートが
brew update Updated Homebrew from 3dcf8b5d to b961ec13.
成功しました。
最後に
brew install protobuf
でGoogle ProtocolBufferのインストールが完了しました
試しに実行
protoc Missing input file.
ちゃんとprotocはいますね。
以上です。
pycharm 4.5.1 tab文字をspaceに変換する
ctrl + shift + Aで出てくるサーチウィンドウから"To Spaces"と入力しエンターで現在のファイルのtabをすべてspaceに置き換えてくれる。