macOS 10.13 でサーバーのディレクトリをコマンドからマウントする方法のメモ。
open smb://(user_name)@(server_name)
とすると、そのサーバー内で接続できるディレクトリのリストを示したダイアログが表示される。
その中で接続したいディレクトリをコマンドに予め指定することもできる。
open smb://(user_name)@(server_name)/(dir_name)
とすると、直接そのディレクトリがローカルマシンの /Voluems/ 以下にマウントされる。
これを Automator の "Application" としてダブルクリックで実行できるようにできる。
"Run Shell Script" に上述のコマンドを書いて保存する。
TeX で論文を書くときの引用文献リストの作成に bibtex を使う。
引用スタイルもいろいろあるが、Elsevier が提供している elsart-num.bst が使い勝手がいい。
ただ、著者が大勢いても全員の名前を出力してしまうので、場所をとってしまう。
著者が3名以上の場合は、筆頭著者 et al. としたいことがある。
そんなときのためにメモを残しておく。
elsart-num.bst の中の FUNCTION を書き換えるとよいそうだ。
http://sk.kuee.kyoto-u.ac.jp/ja/2009/08/bibtex-style/
に詳しく書かれており、参考にさせて頂いた。
--------------------------
FUNCTION {format.names}
{ 's :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
numnames #3 >
{
#2 'namesleft :=
{ namesleft #0 > }
{ s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
nameptr #1 >
{ namesleft #1 >
{ ", " * t * }
{ " {\it et~al}." * }
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
{
{ namesleft #0 > }
{ s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
nameptr #1 >
{ namesleft #1 >
{ ", " * t * }
{ numnames #1 >
{ "" * }
'skip$
if$
t "others" =
{ " et~al." * }
{ ", " * t * }
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
if$
}
--------------------------
リモートにある Linux ホスト A に ssh はできるのに、scp と rsync ができなくなった。
ちょっと焦ったので、状況をメモしておく。
これまで
ssh -p 60022 A
scp -P 60022 local_file user@A:~/xx/remote_file
rsync -e "ssh -p60022" -auv local_dir/ user@A:~/xx/remote_dir/
というような使い方をしていた。
問題なく使えていたのだが、あるときから ssh 以外を実行したときに
パスワード入力後応答しなくなってしまった。
いろいろ検討した末、ホスト A で行ったある変更が問題だった。
他のホストでも使っている zsh を A でも自動で使えるようにするために
.bashrc の最後の行に zsh という行を追加したのだった。
ssh で A にログインしたときに、自動的に zsh が起動し便利なように。
ところがどういうわけか、これが悪さをしていた。
今まで通り bash で起動するようにしたら、scp も rsync も今まで通り使えるようになった。
ssh でログイン時は手動で zsh を起動する。
何か回避策もありそうだが、今はこのまま。
Linux CentOS で bash のターミナルで ls をすると日本語ファイル名が文字化けしてしまう。
$ ls
local tmp ?????????????????? ????????? ??????
bin scp work ?????????????????? ??????
data storage ?????????????????? ?????????????????? ??????
ターミナルの表示コードを UTF8 にしているのだが。
調べたところ --show-control-char というオプションをつければ良い。
$ ls --show-control-char
bin data local scp storage tmp work ダウンロード テンプレート デスクトップ ドキュメント ビデオ 公開 画像 音楽
これだとファイルやディレクトリの色分けされないので、さらに --color をつけて
$ ls --show-control-char --color
bin data local scp storage tmp work ダウンロード テンプレート デスクトップ ドキュメント ビデオ 公開 画像 音楽
とすると見やすくなる。
辞書型の出力文字列を辞書型に戻す ためのメモ。
辞書型のオブジェクトをプリントすると
{'His': 686, 'Ser': 814, 'Val': 63 }
というような文字列になる。
これを読み込んで、辞書型に戻したい。
そのときの方法。
import ast
dictstr = "{'His': 686, 'Ser': 814, 'Val': 63 }"
dictobj = ast.literal_eval(dictstr)
久しぶりに Chainer に戻ってみたところ v3.1 まで上がっていて、
これまでのコードでも多少の変更で動かなくはないが、新しい書き方が便利そうなので、
ちょっと勉強してみた。
例題として見つかるコードが mnist を使っているものが多く、
自分でデータを準備する方法が良くわらかなかったので、
とりあえず、2次関数の学習を例に取り組んでみた内容をメモとして残しておく。
以前に Chainer 1.x でしたのと同じ学習内容である。
1 x N x M x 1 の多層パーセプトロンを定義する。
入力はスカラー値 x、教師信号として x*x を使う。
学習用の x (-> train) と、評価用の x (-> test) を別々に作る。
train = np.array(range(-13,13,2), dtype=np.float32)
test = np.array(range(-10,10), dtype=np.float32)+0.5
dtype=np.float32 の numpy の array として作る。
教師データは x*x なので、
train_teacher = np.power(train,2)
test_teacher = np.power(test,2)
となる。
このままでは、[-13, -12, -11, ... ] という1次元の配列になっている。
これではニューラルネットの入力層に入力できない。
[ [-13], [-12], [-11], ... ] という形の2次元の配列に変換する。
reshape() を使って
train = train.reshape(len(train),1)
などとする。入力データも教師データも同様。
ニューラルネットの入力層に2ニューロンあれば、[ [x1, x2], .... ] という配列になる。
更に、chainer の TuppleDataset を用いて、教師データと組み合わせる。
train_set = tuple_dataset.TupleDataset(train, train_teacher)
test_set = tuple_dataset.TupleDataset(test, test_teacher)
最後にイテレータを作る。
batchsize = int(len(train)/2)
train_iter = Ch.iterators.SerialIterator(train_set, batchsize)
test_iter = Ch.iterators.SerialIterator(test_set, args_batchsize, repeat=False, shuffle=False)
モデルやオプティマイザーを作るところは以前と同じ。
データのイテレータを使って updaterを、更にそれを使って trainer を作る。
updater = training.StandardUpdater(train_iter, mopt, device=-1)
trainer = training.Trainer(updater, (800, 'epoch'), out="result")
これで準備完了。
以下に、コードの全容を示す。
========================================
import numpy as np
import matplotlib.pyplot as plt
import chainer as Ch
import chainer.functions as F
import chainer.links as L
from chainer import training
from chainer.datasets import tuple_dataset
from chainer.dataset import convert
from chainer.training import extensions
######################
# Definitions
#
class MyMLP(Ch.Chain):
train = False
def __init__(self, n_unit_h1, n_unit_h2):
super(MyMLP, self).__init__()
n_input = 1
n_output = 1
with self.init_scope():
# the size of the inputs to each layer will be inferred
self.l1 = L.Linear(n_input, n_unit_h1) # n_in -> n_units
self.l2 = L.Linear(n_unit_h1, n_unit_h2) # n_units -> n_units
self.l3 = L.Linear(n_unit_h2, n_output) # n_units -> n_out
def __call__(self, x):
h1 = F.dropout(F.sigmoid(self.l1(x)), ratio=0.05)
h2 = F.dropout(F.sigmoid(self.l2(h1)), ratio=0.05)
return self.l3(h2)
def test_plot(max, xx, mnn):
xd1 = Ch.Variable(xx[0])
xd2 = Ch.Variable(xx[1])
yd1 = mnn(xd1)
yd2 = mnn(xd2)
zd1 = xd1*xd1
zd2 = xd2*xd2
#print yd
plt.figure(figsize=(6, 6))
plt.plot(xd1.data, yd1.data, 'o', color='b')
plt.plot(xd2.data, yd2.data, 'o', color='r')
plt.plot(xd1.data, zd1.data, '.', color='black')
plt.plot(xd2.data, zd2.data, '.', color='black')
plt.show()
def onedim(x):
return x.reshape(len(x),1)
####################
# Data preparation
#
# Create data
train = np.array(range(-13,13,2), dtype=np.float32)
test = np.array(range(-10,10), dtype=np.float32)+0.5
train_teacher = np.power(train,2)
test_teacher = np.power(test,2)
train = onedim(train)
test = onedim(test)
train_teacher = onedim(train_teacher)
test_teacher = onedim(test_teacher)
train_set = tuple_dataset.TupleDataset(train, train_teacher)
test_set = tuple_dataset.TupleDataset(test, test_teacher)
# Iterator
batchsize = int(len(train)/2)
train_iter = Ch.iterators.SerialIterator(train_set, batchsize)
test_iter = Ch.iterators.SerialIterator(test_set, batchsize, repeat=False, shuffle=False)
###################################################
# Set up a neural network to train
# Classifier reports mean_squared_error loss at every iteration,
# which will be used by the PrintReport extension below.
mnn = MyMLP(100, 160)
model = L.Classifier(mnn, lossfun=F.mean_squared_error)
#model.compute_accuracy = False
model.train = True
eval_model = model.copy()
eval_model.train = False
# Setup an optimizer
mopt = Ch.optimizers.SGD(0.0005)
mopt.setup(model)
updater = training.StandardUpdater(train_iter, mopt, device=-1)
trainer = training.Trainer(updater, (800, 'epoch'), out="result")
###################################################
# Learn
#
print "learn-------"
trainer.extend(extensions.Evaluator(test_iter, eval_model, device=-1))
#trainer.extend(extensions.dump_graph('main/loss'))
#trainer.extend(extensions.snapshot(), trigger=(10, 'epoch'))
trainer.extend(extensions.LogReport(), trigger=(10, 'epoch'))
#trainer.extend(extensions.PlotReport(['main/loss', 'validation/main/loss'], x_key='epoch', file_name='loss.png'))
#trainer.extend(extensions.PrintReport(['epoch', 'main/loss']))#, 'validation/main/loss', 'main/accuracy', 'validation/main/accuracy']))
trainer.extend(extensions.ProgressBar())
trainer.run()
print "learning finish---------"
with Ch.using_config('train', False):
test_plot(10, [train,test], mnn)
この方法で学習200回目、400回目、800回目の結果を以下に示す。
青丸は学習に用いた x に対して、ニューラルネットが出力した値、
赤丸は学習には用いなかった x に対して、ニューラルネットが出力した値、
黒丸は x*x の正解。
学習の回数が増えるに従って、ニューラルネットワークの出力が x*x に近づいている様子がわかる。
200回目。
400回目。
800回目。
このモデルの中では、学習中はニューラルネットワーク内 dropout を使ったり、
評価するとき(グラフを書くとき)には dropout しないように
with Ch.using_config('train', False):
を使ったりしている。
便利な macOS のキーボードショートカットのメモ
Command + Option + Esc : 強制終了アプリ選択画面を開く
Command + Option + Z : Siri 起動
Command + Option + Eject:スリープ
Command + Option + Shift + Q:即座にログアウト
Command + Shift + Q:ログアウト(確認ダイアログ有り)
Command + Control + Eject:アプリケーションを保存してから再起動
Command + Control + 電源ボタン:すぐ強制再起動
Command + Control + Q:ロックスクリーン
Control + Shift + Eject:ディスプレイをスリープ
Jupyter で python のみならず R をインタラクティブに使えるようになるとのことを聞いたので、早速試してみた。
MacOS High Sierra (10.13) で作業を行った。
ターミナル上で R を起動し、以下のコマンドを実行する。
> install.packages(c('repr', 'IRdisplay', 'evaluate', 'crayon', 'pbdZMQ', 'devtools', 'uuid', 'digest'))
> devtools::install_github('IRkernel/IRkernel')
> IRkernel::installspec()
そして、R を終了し、ターミナルで
jupyter notebook
として実行する。画面右上の
New
で開くメニューの中に R が表示されていれば成功。