MCCの計算
この指標は普通は使わない気がする。
class MCC: def conf(self, psp_true, psp_pred): """ psp_true: shape = (n_data, 1) のarrayとして渡す """ #==== epsp ==== y_true = np.ravel(psp_true) y_pred = np.ravel(psp_pred) tp_epsp = (y_true >= 1) & (y_pred > 0) fp_epsp = (y_true <= 0) & (y_pred > 0) fn_epsp= (y_true >= 1) & (y_pred <= 0) tn_epsp = (y_true <= 0) & (y_pred <= 0) #==== ipsp ==== y_true = np.ravel(psp_true) y_pred = np.ravel(psp_pred) tp_ipsp = (y_true < 0) & (y_pred < 0) fp_ipsp = (y_true >= 0) & (y_pred < 0) fn_ipsp = (y_true < 0) & (y_pred >= 0) tn_ipsp = (y_true >= 0) & (y_pred >= 0) #--------- For plot------------------ self.tps = [tp_epsp.sum(), tp_ipsp.sum()] self.fps = [fp_epsp.sum(), fp_ipsp.sum()] self.fns = [fn_epsp.sum(), fn_ipsp.sum()] self.tns = [tn_epsp.sum(), tn_ipsp.sum()] # mcc = self.compute(tps, fps, fns, tns) def compute(self): mcc = 0 for tp, fp, fn, tn in zip(self.tps, self.fps, self.fns, self.tns): if (tp+fp)*(tp+fn)*(tn+fp)*(tn+fn) == 0: return 0 mcc += (tp*tn-fp*fn)/np.sqrt((tp+fp)*(tp+fn)*(tn+fp)*(tn+fn)) return mcc/2
参考文献 Matthews, Brian W. "Comparison of the predicted and observed secondary structure of T4 phage lysozyme." Biochimica et Biophysica Acta (BBA)-Protein Structure 405.2 (1975): 442-451.
RaspiにDockerを入れる
作業
公式サイト
に書いているとおりにしてインストール
Raspbian users cannot use this method! For Raspbian, installing using the repository is not yet supported. You must instead use the convenience script.
と書いているのでスクリプトを使う。 Raspiにログインして、root userにしてから
# curl -fsSL https://get.docker.com -o get-docker.sh # sh get-docker.sh
しかし、エラーが出る.いろんな解決法が出ているが、結局rebootするのでうまく行った。
# Executing docker install script, commit: f45d7c11389849ff46a6b4d94e0dd1ffebca32c1 + sh -c apt-get update -qq >/dev/null + sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null + sh -c curl -fsSL "https://download.docker.com/linux/raspbian/gpg" | apt-key add -qq - >/dev/null Warning: apt-key output should not be parsed (stdout is not a terminal) + sh -c echo "deb [arch=armhf] https://download.docker.com/linux/raspbian stretch stable" > /etc/apt/sources.list.d/docker.list + sh -c apt-get update -qq >/dev/null + [ -n ] + sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null E: Sub-process /usr/bin/dpkg returned an error code (1) root@da-vinci:/home/endo# apt-get autoremove パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 4 個。 1 個のパッケージが完全にインストールまたは削除されていません。 この操作後に追加で 0 B のディスク容量が消費されます。 docker-ce (5:19.03.5~3-0~raspbian-stretch) を設定しています ... Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. invoke-rc.d: initscript docker, action "start" failed. 1月 27 00:47:22 da-vinci systemd[1]: docker.service: Unit entered failed state. 1月 27 00:47:22 da-vinci systemd[1]: docker.service: Failed with result 'exit-code'. dpkg: パッケージ docker-ce の処理中にエラーが発生しました (--configure): サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 1 を返しました 処理中にエラーが発生しました:
rebootしてから
# apt-get install -y -q docker-engine # curl -fsSL https://get.docker.com -o get-docker.sh # sh get-docker.sh
するとうまく入るようだ.
# Executing docker install script, commit: f45d7c11389849ff46a6b4d94e0dd1ffebca32c1 + sh -c apt-get update -qq >/dev/null + sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null W: APT had planned for dpkg to do more than it reported back (0 vs 4). Affected packages: docker-ce:armhf + sh -c curl -fsSL "https://download.docker.com/linux/raspbian/gpg" | apt-key add -qq - >/dev/null Warning: apt-key output should not be parsed (stdout is not a terminal) + sh -c echo "deb [arch=armhf] https://download.docker.com/linux/raspbian stretch stable" > /etc/apt/sources.list.d/docker.list + sh -c apt-get update -qq >/dev/null + [ -n ] + sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null + sh -c docker version Client: Docker Engine - Community Version: 19.03.5 API version: 1.40 Go version: go1.12.12 Git commit: 633a0ea Built: Wed Nov 13 07:36:04 2019 OS/Arch: linux/arm Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.5 API version: 1.40 (minimum version 1.12) Go version: go1.12.12 Git commit: 633a0ea Built: Wed Nov 13 07:30:06 2019 OS/Arch: linux/arm Experimental: false containerd: Version: 1.2.10 GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339 runc: Version: 1.0.0-rc8+dev GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657 docker-init: Version: 0.18.0 GitCommit: fec3683 If you would like to use Docker as a non-root user, you should now consider adding your user to the "docker" group with something like: sudo usermod -aG docker your-user Remember that you will have to log out and back in for this to take effect! WARNING: Adding a user to the "docker" group will grant the ability to run containers which can be used to obtain root privileges on the docker host. Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface for more information.
docker-compose
$ git clone https://github.com/docker/compose.git
$ ./script/build/linux
$ cd dist
$ ./docker-compose-*** version
バイナリをbin以下にコピーする。
$ sudo cp docker-compose-Linux-armv7l /usr/local/bin/docker-compose $ sudo chown root:root /usr/local/bin/docker-compose $ sudo chmod 755 /usr/local/bin/docker-compose
参考ページ
Raspbian上にdockerインストールでエラーにもめげずCentOS動かした件 - Qiita
Docker comes to Raspberry Pi - Raspberry Pi
起動
$ systemctl start docker or # 自動起動 $ systemctl enable docker
check
$ systemctl status docker
info
$ docker info
Docker command
download start
$ docker run --name some-nginx -d -p 8080:80 nginx
image
$ docker images
ps
$ docker ps
stop
$ docker stop some-nginx
delete
delete container
$ docker rm some-nginx
delete image
$ docker rmi nginx
Docker compose
コンテナ開始
$ docker-compose up
バックグラウンドで実行
$ docker-compose up -d
spike trainのファイルを読み込む
spike時刻がneuronごとに";"区切りで, 縦に並んで記録されている時にデータを読み込む
def load_data(filepath, format="list"): """ ;区切りのデータをnumpyで扱える形に読み込む データはlistでここの要素はspike time """ with open(filepath, "r") as f: lines = f.read() lines = lines.split(";") N_neuron = len(lines) - 1 # 最後は\nだけのデータのため print("neuron数は{}".format(N_neuron)) spikes = [] for index in range(N_neuron): spikes.append(np.array([x for x in lines[index].split("\n") if x], dtype=np.float64)) #print("Neuron {}-th spikes count : {}".format(index, len(spikes[index])) # , end="") print("load {} neurons".format(index)) if format=="ndarray": # listではなく, [neuron番号, spike time]のarrayにする # spike timeの順番にはしない spiketrain = [] # spiketrainにspike timeを入れていく for i in range(N_neuron): # iをスパイクの数分だけ並べただけ indexes = [i for _ in range(len(spikes[i]))] spiketrain.append(np.vstack([indexes, spikes[i]]).T) spiketrain = np.vstack(spiketrain) return spiketrain
macOS エラーメモ: limits.h: No such file or directory
pythonのモジュールを作成する時にgccでエラーが出て止まった.
- macOS 10.15.2
- anaconda3-5.3.1をpyenvで入れている
limits.h: No such file or directory error: command 'gcc' failed with exit status 1
のようなエラー.
原因はXcodeのgccとcondaのgccが入っていることによるエラー?らしい
$ which python ~./pyenv/../gcc
みたいに出てきた. anacondaのgccを消して, パスを直したら解決した. (pyenvで環境分けをしている)
$ conda uninstall gcc $ pyenv rehash
手書き数式をtexに変換してくれる有能アプリ
のなかのMathを押せば手書きで書いたものをlatexの数式に書き換えてくれる.
ディレクトリのepsをpdfに変換する
shellで行います。 ファイル名がepsからpdfに変わったものとして出力させます。
ファイル名を取得して、ループで回します。
for var in `ls *eps` do name=`basename $var .eps` echo $name.pdf epstopdf $var $name.pdf done
keras: layerの初期化で値代入をする
Kerasでlayerにこちらから指定した初期値を入れて、固定する方法について書いてます。 一度学習したネットワークのconv層のfilterの一部だけを使用したいことがあったのでその時の記録です。
- 初期値の代入は
keras.initializers.Constant()
を利用する。 trainable=False
にすればそれで固定できる
conv層を使うのを例としてあげる。Function APIを使用する。
from tensorflow.keras.layers import Input, Dense, Conv1D, Flatten, Reshape from tensorflow.keras.models import Model inputs = Input(shape=(100,)) hidden = Reshape((100, 1))(inputs) hidden = Conv1D(3, 5, strides=1, padding='same', activation="relu", name="conv")(hidden) hidden = AveragePooling1D(pool_size=kernel_size, strides=1, padding="same")(hidden) hidden = Flatten()(hidden) outputs = Dense(10, activation="relu")(hidden) model = Model(inputs=inputs, outputs=outputs)
このモデルで1度計算したconv1Dのkernelを使いたいとする。 学習した後に、
kenels = sess.run(model.get_layer("conv").weights[0]) bias = sess.run(model.get_layer("conv").weights[1])
で固定したい値を得る。shapeさえあっていれば別の値でもいいですが、多分、numpyの方がいい。
from tensorlfow.keras.initilizers import Constant inputs = Input(shape=(100,)) hidden = Reshape((100, 1))(inputs) hidden = Conv1D(3, 5, strides=1, padding='same', activation="relu", name="conv", kernel_initializer=Constant(kernels), bias_intializer=Constant(bias), trainable=False)(hidden) hidden = AveragePooling1D(pool_size=kernel_size, strides=1, padding="same")(hidden) hidden = Flatten()(hidden) outputs = Dense(10, activation="relu")(hidden) model = Model(inputs=inputs, outputs=outputs)
とすれば学習済みのkernel, biasに固定できる