Ubuntuにpyenv+pyenv-virtualenvを入れるときのメモ
pyenv
pyenv-virtualenv
まずはpyenvを ~/.pyenv
にインストールする.
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
pyenvを利用するには~/.bashrc
等に以下の設定を追加する.
export PYENV_ROOT=$HOME/.pyenv export PATH=$PYENV_ROOT/bin:$PATH eval "$(pyenv init -)"
続いてpyenv-virtualenvを ~/.pyenv/plugins/pyenv-virtualenv
にインストールする.
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
同じく,~/.bashrc
等に
eval "$(pyenv virtualenv-init -)"
を追加する.
インストールできたか確認.
$ which pyenv /home/buko106/.pyenv/bin/pyenv
などと表示されればOK.
お好みのバージョンのPythonをインストールする.
$ pyenv install 3.6.2 Downloading Python-3.6.2.tar.xz... -> https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz Installing Python-3.6.2... Installed Python-3.6.2 to /home/buko106/.pyenv/versions/3.6.2
ビルドが走るので少し待つ.なにも表示されなければOK.
ファイル群は全て,~/.pyenv/versions/3.6.2/
にインストールされる.
続いて仮想環境を作成する.今回は流行りのtensorflowのための仮想環境を作ってみる.
仮想環境を作成するコマンドはpyenv virtualenv (元にするPythonのバージョン) (仮想環境につける名前)
となる.
$ pyenv virtualenv 3.6.2 tensorflow $ pyenv activate tensorflow (tensorflow) $
上記のようにプロンプトに仮想環境名が表示されれば,その環境が有効になっている.
(tensorflow) $ pip install --upgrade tensorflow (tensorflow) $ python >>> import tensorflow as tf >>> tf.__path__ ['/home/buko106/.pyenv/versions/tensorflow/lib/python3.6/site-packages/tensorflow']
しっかりと仮想環境下にあるパッケージが読み込まれている.
仮想環境から出るには
(tensorflow) $ pyenv deactivate $
ライブラリの依存関係でハマった時に使うコマンド
ldd
elf binaryやshared objectに対して使える.
使用例
~$ ldd /usr/bin/apt linux-vdso.so.1 => (0x00007fff362ab000) libapt-pkg.so.5.0 => /usr/lib/x86_64-linux-gnu/libapt-pkg.so.5.0 (0x00007f504c29d000) libapt-private.so.0.0 => /usr/lib/x86_64-linux-gnu/libapt-private.so.0.0 (0x00007f504c04a000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f504bcbf000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f504baa8000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f504b6de000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f504b4d9000) libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f504b2be000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f504b0a4000) libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007f504ae93000) liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f504ac71000) liblz4.so.1 => /usr/lib/x86_64-linux-gnu/liblz4.so.1 (0x00007f504aa59000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f504a74f000) /lib64/ld-linux-x86-64.so.2 (0x0000556e99f8c000)
ld
使用例 ※カレントディレクトリにa.outが生成される可能性あり.
~$ ld --verbose -Y $LD_LIBRARY_PATH -lbz2 (中略) attempt to open //usr/local/lib/x86_64-linux-gnu/libbz2.so failed attempt to open //usr/local/lib/x86_64-linux-gnu/libbz2.a failed attempt to open //lib/x86_64-linux-gnu/libbz2.so failed attempt to open //lib/x86_64-linux-gnu/libbz2.a failed attempt to open //usr/lib/x86_64-linux-gnu/libbz2.so succeeded -lbz2 (//usr/lib/x86_64-linux-gnu/libbz2.so) libc.so.6 needed by //usr/lib/x86_64-linux-gnu/libbz2.so found libc.so.6 at //lib/x86_64-linux-gnu/libc.so.6 ld-linux-x86-64.so.2 needed by //lib/x86_64-linux-gnu/libc.so.6 found ld-linux-x86-64.so.2 at //lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 ld: warning: cannot find entry symbol _start; not setting start address
2017/08/13 更新
$LD_LIBRARY_PATHが正しく処理されないので,上記だとだめ.
g++ main.cpp -o main -Wl,--verbose -lbz2
とすれば,$LD_LIBRARY_PATHを含むパス探索が見られる.
gcc>=5.4.0をLinuxでビルドする方法
Installing GCC - GNU Project - Free Software Foundation (FSF)に書いてある依存ライブラリ,GMP,MPFR,MPCをインストールする.
パッケージマネージャでシステムにインストールできれば良いですが,無理な場合はGMP,MPFR,MPCの順にソースからビルドする.
configureを動かす際に –with-gmp/mpfr/mpc などのオプションが必要になるだろう.
インストールしたGMP,MPFR,MPCにはLD_LIBRARY_PATHを通しておく.
gccのtar ballをGCC mirror sites - GNU Project - Free Software Foundation (FSF)らへんからダウンロードする.
configureを動かす際に –with-gmp/mpfr/mpc などのオプションが必要になるだろう.
ビルド中にシステムのインクルードファイルと変数/関数定義が衝突するので,
c++ - g++ 4.7.1 compilation error : conflicting types for ‘strsignal’ - Stack Overflow
を参考にして
unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE
を叩いてからmakeする.
その際,コア数に合わせてジョブ数を-j4などと指定する.
Ubuntu+pyenv-virtualenv下のpython3にOpenCVの最新版をインストールした話
今回は
pyenv virtualenv 3.5.3 opencv
で作成した仮想環境にインストールする.
仮想環境にnumpyをインストール
pyenv activate opencv pip install numpy
Releases - OpenCV library あたりからソースをダウンロード.
依存ライブラリは Documentation -> Introduction to OpenCV -> Installation in Linux に書いてある.
適当にビルドディレクトリを作成
cd /path/to/opencv-source mkdir build cd build
以下のスクリプトでcmakeを実行する.
ROOT=~/.pyenv/versions/3.5.3 VENV_ROOT=$ROOT/envs/opencv cmake \ -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=$VENV_ROOT \ -D INSTALL_C_EXAMPLES=OFF \ -D BUILD_NEW_PYTHON_SUPPORT=ON \ -D BUILD_opencv_python3=ON \ -D BUILD_opencv_legacy=OFF \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D BUILD_EXAMPLES=ON \ -D PYTHON3_EXECUTABLE=$ROOT/bin/python \ -D PYTHON_LIBRARY=$ROOT/lib/libpython3.5m.a \ -D PYTHON_INCLUDE_DIR=$ROOT/include/python3.5m \ -D PYTHON_INCLUDE_DIRS=$ROOT/include/python3.5m \ -D PYTHON_INCLUDE_DIRS2=$ROOT/include/python3.5m \ -D INCLUDE_DIRS=$ROOT/include/python3.5m \ -D INCLUDE_DIRS2=$ROOT/include/python3.5m \ -D PYTHON3_PACKAGES_PATH=$VENV_ROOT/lib/python3.5/site-packages \ -D PYTHON3_NUMPY_INCLUDE_DIRS=$VENV_ROOT/lib/python3.5/site-packages/numpy/core/include \ ..
参考
Install opencv3 for python 3.5.0 with pyenv on ubuntu 14.04 · GitHub
Ubuntu16.04をLet's Note(CF-MX3)にデュアルブートでインストールした話
Windows8に搭載されている「ディスクの管理」からCドライブ(SSD)のパーティションを縮小しようとしましたが、大きく縮小しようとするとうまく行きませんでした。
Windows7の標準機能「ボリュームの縮小」でパーティション容量が縮小できない問題について: Fat as a pig(ごんぶと)
最終的には下のページで勧められているフリーソフトを使いました。
- Ubuntu16.04をインストールした話
日本語に対応させるなら下のページから手に入る日本語Remixを使ってインストールすると楽です。
Ubuntuの入手 | Ubuntu Japanese Team
変換メソッドはmozcが好きです。
- 種々の問題の解決方法
WindowsとUbuntuを切り替えて起動するたびに時間が9時間進んだり戻ったりします。 次のサイトで解決しました。
PCのハードウェアクロックをUbuntuはUTC(協定世界時)で扱っているのに対して、 Windows(日本語版)ではlocaltime(日本標準時)で扱っているためです。
バックライトの輝度が変更できない(Ubuntu上では数値が変わるが、実際は変化しない)問題がありました。
/usr/share/X11/xorg.conf.d/20-intel.conf を次のページに従い追加したら変化するようになりました。 ※未解決問題:電源を繋いだ瞬間に輝度が勝手に低下する(手動で戻すしかない)
内蔵スピーカーから音が出ない(イヤホンからは出る) 原因:スピーカーなのにHeadphoneとして認識されている。そしてHeadphoneの音量がミキサーのレベルで0になっている。 ひとまずの対応が以下
ターミナルからalsamixerを起動。
1枚目のサウンドカードを選択、2枚目はイヤホンを繋いだ状態、3枚目はイヤホンを抜いた状態。 内蔵スピーカーから音を出したいときは3枚目の状態から2枚目の状態に手動で戻す。
勝手に変わらないように設定する方法を教えてください。
- その他
※日本国内で市販DVDのCSSをクラックして複製することは、著作権法第30条第1項第2号により私的使用にならないことが規定されています。再生するだけにしておきましょう。 kledgeb.blogspot.jp
2017/07/22 追加
A Deep Learning Framework: Caffe リンク集
Caffeは昨今流行りのディープラーニングのフレームワークの1つです。
Caffe | Deep Learning Framework
有名な他のフレームワークとして、ChainerやTensorflowというものがあります。
Caffeの特徴は学習済みのモデルが多数配布されていること、教師データのデータベースの作成がとても簡単(例えば画像データ群と、画像へのパスとカテゴリの列挙されたテキストデータがあればOK)であるということです。
管理者権限の無いリモートのCentOS6マシンでビルドおよびPython Bindingを利用するに当たって、かなり手こずりました。以下の記事を参考にしました。
ディープラーニングライブラリBVLC/Caffeを管理者権限rootなしでインストールした時のメモ集 - Qiita
僕の場合は、すでに管理者権限でインストールされたものが多く
・Anacondaのインストール+要求モジュールをpipで導入
・Anacondaのpythonの実行バイナリを指定してBoostライブラリをビルド
・Makefile.configを書く(CMakeは使わない)
の、だいたい3ステップでできました。
PythonはAnacondaを用いました。僕は自力で頑張りましたが、OSのPythonやライブラリ群とコンフリクトしないようにconda+pyenvを使うのが良いらしいです。
データサイエンティストを目指す人のpython環境構築 2016 - Qiita
3D-FCNを用いた論文手法をCaffeで実装するというタスクに取り組んでいます。Caffeは割と画像処理に特化しているので高次元のCNNについては情報が少ないです。またバージョンによって仕様が変わることも多いでしょう。
参照しているページを列挙します。
N次元の畳み込みは実装されているようです。
ND convolution with im2col by jeffdonahue · Pull Request #2049 · BVLC/caffe · GitHub
任意次元の教師データにはHDF5形式を用いる必要がある(?)ようです。
Caffeの3D-CNNを使ったダミーデータの学習 - Qiita
損失関数の形が特殊なので自作のPython Layerを書いています。
caffe/pyloss.py at master · BVLC/caffe · GitHub
Python implementation of softmax loss layer · Issue #4023 · BVLC/caffe · GitHub
既存のレイヤーの組み合わせで書けるかもしれないので要調査。
ルンゲ=クッタ法の気持ちを理解したい(1)
ルンゲ=クッタ法 - Wikipedia に関する課題が出たが、授業をロクに聞いていなかったため式だけを眺めていても気持ちが全く分からずに苦心した。そこでブログの投稿の練習も兼ねて記事にしてみる。
ルンゲ=クッタ法とは
Wikipediaによると
ルンゲ=クッタ法(英: Runge–Kutta method)とは、数値解析において微分方程式の初期値問題に対して近似解を与える一連の方法である。
上のページと同じく、 という初期値問題が与えられていると以下では考えることにする。
現実的な時間で十分な近似精度を得やすいので、数値解析の分野では重宝されるようだ。
オイラー法
ルンゲ=クッタ法の一番簡単なケースとして、(前進)オイラー法がある。
以降に出てくる近似解を求めるアルゴリズムは、十分小さな刻み幅を設定し、時刻 における の近似値 を順番に求めていくという部分は同じであるので覚えておいてほしい。
であることを思い出せば、テイラー展開の1次までの項 を元にした近似式であることが分かる。
実はこの計算では十分な精度が得られない。
直観的には、直線近似をしているので と の誤差がそのまま累積されていくことから、刻み幅として直線とみなせる十分に狭い区間をとる必要があると理解できる。
正確に言うと各ステップでの誤差が であり、時刻までのステップ数は であるので、(時刻を固定したとき)誤差は となる。
これは1桁精度をよくするために10倍の計算が必要になるということである。余りにも過大であるのが分かるだろう。
オイラー法のサンプルプログラム
次の初期値問題をオイラー法を用いて解いて、解析解と比較してみる。
解析的に解を求めると となる。 とオイラー法で近似的に求めた値の誤差を両対数でプロットしてみる。
Pythonという言語が流行っているらしいのでPythonを使って書いたが、Pythonらしくない書き方をしていたらコメントで教えてほしい。
import numpy as np import matplotlib.pyplot as plt def f(t,y): return 2.0 * t * y def ans(t): return np.exp(t**2.0) m = 2 M = 7 N = np.logspace(m,M,M-m+1,10,dtype=int) # 10^m ... 10^M Y = np.zeros(M-m+1) for n in N: h = 1.0 / float(n) # h = 1 / n y = 1.0 for i in range(0,n): t = float(i)/float(n) y = y + h * f(t,y) Y[np.where(N==n)] = y plt.xscale("log") plt.yscale("log") plt.title("Euler method") plt.xlabel("step width") plt.ylabel("error") plt.grid(which="both") plt.plot(1.0/N,abs(Y-ans(1.0)),"o-",markersize=13) # ( h , |y - e| ) plt.show()
まさかオイラー法だけで(1)が終わってしまうとは思わなかった。 (2)へ (そのうち)