Menu
$ brew install python3
で最新のpythonが入る。
$ python3 --version Python 3.9.13
pythonはよく複数のバージョンを使いたくなることがあるので、以下のパッケージ管理ソフトを利用して複数の仮想環境を作成することが多い。
Pythonのパッケージ管理ソフトにはpip, pipenv, pyenv, anacondaなどたくさんある。M1チップの場合はMiniForgeを使うとよいらしい。
MiniForgeのインストール
$ wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh $ bash Miniforge3-MacOSX-arm64.sh
色々聞かれるので、yes (or Enter)で良い。
仮想環境の構築+アクティベーション
$ conda create --name hogeenv python=3.8 $ conda activate hogeenv
これでpython3.8の仮想環境hogeenvができた。
$ conda deactivate
で仮想環境を終了。
デフォルトでbaseという環境がactiveになるので
conda config --set auto_activate_base False
で無効化できる。作った仮想環境のリストは
conda env list
で見ることができる。
仮想環境をアクティベートした状態で以下のコマンドで起動。
$ conda install jupyter $ jupyter notebook
Notebook上でのモジュールのインストールの仕方。
!pip install module
importできない時はpathの確認
!pip show module
をして、追加
import sys
sys.path.append('path')
便利なコマンド
cellをdeactivate : esc + r
cellをactivate : esc + y
indentの位置でスコープが決まる(?)。
コメントであってもindentの位置を変えることは許されない。(),[],{}内は改行が許されている。
変数の宣言時に型の指定は不要(?)。 函数の引数にも不要(?)。
注:組み込み関数を上書きしようとしても何もエラーを吐かず、そのまま上書きする(?)。
例:print = 0などとしてしまうと、何もエラーを吐かずprintが関数でなくintになり、print()がエラーを吐くようになる。
対処法:del printでリセット可能。
''と““どちらも可(!?)
変数を文字列にして出力
print("Process %s type %d : progress %.3f %%"%(hoge,huga,piyo))
%s : 文字, %d : 整数, %.3f : float3桁まで表示。 %% : %のエスケープ
カレントディレクトリのhoge.pyを読み込むとき
import hoge
この時、hoge.pyは実行される。ライブラリの場合は定義のみ書いてある(コマンドの実行を含まない)ことも多い。
if __name__ == '__main__': #ファイルを直接実行したときTrue main()
hoge.pyのクラスHogeを呼びたい場合は
from hoge import Hoge
以下のように宣言する。返り値を複数設定可能で、配列で渡される。
def hoge(huga,piyo):
foo = huga + piyo
bar = huga - piyo
return foo, piyo
配列の各要素に関数を作用させたいとき
例:shapeが(1000,2)のnumpy.array num_arrayの二つ目の軸の要素の和と差のnumpu.arrayを作りたい
new_array = np.apply_along_axis(lambda element: hoge(*element), 1, num_array)
lambda : ラムダ式。ここでだけ使う関数を宣言できる。
class Hoge(Fuga): #Fugaを継承したHogeクラス
def __init__(self): #__init__はコンストラクタ
super().__init__() #Fugaのコンストラクタが呼ばれる
self.hoge = 0 #メンバ変数hogeはここで定義される
def __init__(self, piyo): #引数違いのコンストラクタ
super().__init__()
self.hoge = piyo
def hogehoge(self, foo, bar):
......
以下のインデントが揃っている部分がそのクラスの定義。()を付けるとクラスを継承できる(省略可)。 クラスの中で変数や函数を定義するとそのメンバになる。 コンストラクタの中で(self.hogeの形で)宣言した変数はメンバ変数になる。
classの函数は第一引数にselfを必ず持たなくてはならない。メンバ変数hogeを呼ぶときはself.hogeの形で呼ぶ。
コンストラクタは__init__()、デストラクタは__del__()。引数が違うコンストラクタを複数定義できる。
super().で継承前のクラスのメンバを呼び出せる。
一行は先頭に#を置く。複数行は"""(ダブルクオート三つ)で囲む。
for i in range(0,nstep,1) : ### for文の中身 ###
range(start,stop,step)は$\mathrm{start}\leqq i<\mathrm{stop}$の間でstepずつカウンターを増やす。
type() : 型を表示する。
pdbモジュールを使うとよい。
import pdb
pdb.set_trace()した行からデバッグが始まる。
| コマンド | 説明 |
|---|---|
| l | コード確認 |
| s | 現在の行を実行。次の関数の前で止まる |
| p var | 変数varの中身を確認 |
数値の操作をするためのpythonのモジュール
Numpyの配列は2次元から。つまり、一次元配列には”縦”と“横”がある。
| 関数 | 説明 |
|---|---|
| .shape | 配列(テンソル)の形状を確認できる |
| .flatten() | “横”1次元配列になる |
| .concatenate() | 既存の次元に対して結合 |
| .stack() | 新たな次元を作って結合 |
a,b,c=hist
a=value of each bin, b=bin
run_index = 0
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax2.plot(histories2[run_index].history['lr'],label='learning rate',linestyle='--',color='green')
ax1.plot(histories2[run_index].history['loss'],label='training loss')
ax1.plot(histories2[run_index].history['val_loss'],label='validation loss')
plt.title('1st iteration, step 1, batch : 8192 lr : 1e-6, 1st trials')
ax1.set_xlabel('epoch')
ax1.set_ylabel('Loss')
ax2.set_ylabel('Learning Rate')
handler1, label1 = ax1.get_legend_handles_labels()
handler2, label2 = ax2.get_legend_handles_labels()
ax1.legend(handler1 + handler2, label1 + label2)
#plt.legend()
plt.figure()
機械学習のためのモジュール。 installの手順
$ wget https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha2/tensorflow_macos-0.1alpha2.tar.gz $ tar xvzf tensorflow_macos-0.1alpha2.tar.gz $ env="$HOME/miniforge3/envs/python38" $ libs="$PWD/tensorflow_macos/arm64/" $ pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/grpcio-1.33.2-cp38-cp38-macosx_11_0_arm64.whl" $ pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/h5py-2.10.0-cp38-cp38-macosx_11_0_arm64.whl" $ pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/tensorflow_addons_macos-0.1a2-cp38-cp38-macosx_11_0_arm64.whl" $ conda install -c conda-forge -y absl-py $ conda install -c conda-forge -y astunparse $ conda install -c conda-forge -y gast $ conda install -c conda-forge -y opt_einsum $ conda install -c conda-forge -y termcolor $ conda install -c conda-forge -y typing_extensions $ conda install -c conda-forge -y wheel $ conda install -c conda-forge -y typeguard $ pip install wrapt flatbuffers tensorflow_estimator google_pasta keras_preprocessing protobuf $ pip install tensorboard $ pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/tensorflow_macos-0.1a2-cp38-cp38-macosx_11_0_arm64.whl"
バージョンが確認できれば成功
$ python >>> import tensorflow as tf >>> tf.__version__ '2.4.0-rc0'
環境の複製
conda create --name new_environment_name --clone existing_environment_name
環境の削除
conda env remove --name myenv