これが対策なのかわからないが…
コントロールパネルの電源の管理から、下記の表示が出るところまで行って、
「現在利用可能ではない設定を変更します」の文字をクリックして、「シャットダウン設定」の
[v] 高速スタートアップを有効にする(推奨)
を外してみたところちゃんと電源が落ちました。
これが原因かどうかは不明。推奨ってなってるからチェック入れた状態の方が良いのだと思うのだが…
試す場合は一応、自己責任で(たぶん起動が遅くなるだけですが)
コントロールパネルの電源の管理から、下記の表示が出るところまで行って、
「現在利用可能ではない設定を変更します」の文字をクリックして、「シャットダウン設定」の
[v] 高速スタートアップを有効にする(推奨)
を外してみたところちゃんと電源が落ちました。
これが原因かどうかは不明。推奨ってなってるからチェック入れた状態の方が良いのだと思うのだが…
試す場合は一応、自己責任で(たぶん起動が遅くなるだけですが)
さて、fs
パッケージのお話です。前回から結構あいてしまいました。
fs
パッケージでファイルのpathについて扱う関数はpath_***
という名前になっています。
path
で始まる関数は下記のようです。
ls(envir = asNamespace("fs"), pattern = "^path_*") #> [1] "path" "path_" "path_abs" #> [4] "path_common" "path_dir" "path_expand" #> [7] "path_expand_r" "path_ext" "path_ext_remove" #> [10] "path_ext_set" "path_ext<-" "path_file" #> [13] "path_filter" "path_home" "path_home_r" #> [16] "path_join" "path_norm" "path_package" #> [19] "path_real" "path_rel" "path_sanitize" #> [22] "path_split" "path_temp" "path_tidy"
ここから、exportされている関数について順に見ていきます。
ファイルパスについては原則としてそのファイルパスに実際にディレクトリやファイルが存在してもしなくてもエラーになりません。
また、区切り文字は"/"で、Windowsの"\"の形で与えても動作し、出力は全て"/"に変更されます(書式が環境に依存しない点がfs
パッケージの良いところの1つです)
path()
関数は任意の数の引数を...
として受け取りますが、他は原則としてc()
でまとめて与えてあげないといけません。
その代わり、まとめさえすればいくつ与えても同じ処理をしてくれますので、変数にまとめてから与えれば一度に処理されるためコードも見やすく実行速度も良いというコードの出来あがりですね。
与えられた引数からファイルパスを構成して返してくれます。here
パッケージのhere()
と同様の動きですね(fs::path
は拡張子も与えられるが)
## プロジェクトのroot(今回はC:/Users/niszet/Documents/r work/test4blog/)を起点としたファイルパスを返す) here::here("hoge", "fuga") #> [1] "C:/Users/niszet/Documents/r work/test4blog/hoge/fuga"
Helpにある実行例をコピペ。here
と違って、プロジェクトのrootを起点としたパスになりませんが、そのための関数は別途あります。この結果をhere()
に与えても良いですね。
fs::path("foo", "bar", "baz", ext = "zip") #> foo/bar/baz.zip
このようにすっきりと書けます。
わざわざstringr
パッケージを使って書かなくても良いわけです。便利ですね。
stringr::str_c(c(stringr::str_c(c("foo", "bar", "baz"), collapse = "/"), "zip"), collapse = ".") #> [1] "foo/bar/baz.zip"
こちらは絶対パスで返してくれる関数。起点は引数start
に与え、デフォルトは現在いるディレクトリ.
になっています(下記では明示的に与えていますが。現在いるディレクトリはプロジェクトのルートにしています)
fs:::path_abs(path = "a", start = ".") #> [1] C:/Users/niszet/Documents/r work/test4blog/a
あまり意味はないですが、プロジェクトルートを起点として明示すればこのようになります。(これはhere()
に直接渡した方が良いが)
fs:::path_abs(path = "a", start = here::here()) #> [1] C:/Users/niszet/Documents/r work/test4blog/a
相対パス <-> 絶対パス変換は地味に使うので、こういうのがあると便利ですね。絶対パス->相対パスはpath_rel()
を参照してください。
任意の数のpathを表す文字列を受け取り、その共通部分を返します。例えば下記の例であれば、"aaa/bbb"までが共通ですのでこの文字列が返ってきます。
path("aaa", "bbb" , "ccc") #> aaa/bbb/ccc path("aaa", "bbb" , "ddd") #> aaa/bbb/ddd path_common(c(path("aaa", "bbb" , "ccc"), path("aaa", "bbb" , "ddd"))) #> aaa/bbb
パスのディレクトリ部分を返す関数。実際には最後の"/"からうしろを削除する動きをしているようなので、そのパスがディレクトリを示している可能性がある場合はあらかじめis_dir()
を使ってそのパスは弾いておきましょう
path_dir(c("aaa/bbb/ccc","aaa/bbb/ddd")) aaa/bbb aaa/bbb
~
を展開してくれます。
path_expand("~") #> C:/Users/niszet path_expand_r("~") #> C:/Users/niszet/Documents
path_expand()
のWindows上の挙動はpath.expand()
とは異なるようです。path_expand_r()
はその挙動を再現した動きをするようです。
詳細についてはHelpを参照してください。
path.expand("~") #> [1] "C:/Users/niszet/Documents"
拡張子を取り出す関数。
path_ext("aaa/bbb.txt") #> [1] "txt"
拡張子だけを削除する関数。
path_ext_remove("aaa/bbb.txt") aaa/bbb
これらの関数は、右から見てはじめて出てきた"."から右を拡張子、左を残りとしているので、
path_ext_remove("aaa.bbb/ccc/ddd") #> aaa path_ext("aaa.bbb/ccc/ddd") #> [1] "bbb/ccc/ddd"
といった挙動になります。気をつけましょう。
拡張子を与えます。既にある場合は置き換えます。
path_ext_set("aaa/bbb", "txt") #> aaa/bbb.txt path_ext_set("aaa/bbb.zip", "txt") #> aaa/bbb.txt
これも先の例と同様の拡張子の判断なので注意。
ファイル部分を返す。
path_file("aaa/bbb.txt") #> bbb.txt
これも最後の"/"から右を返す、という挙動なので拡張子がない場合は下記のようになる。
path_file("aaa/bbb") #> bbb
ファイルパスに対して、正規表現を使って絞り込むことが出来る。regexp
だけじゃなくglob
でもよい。
## 英字1文字にマッチし、そのあとにその文字が1文字以上続く、というパタン(要するにaa, aaa, aaaa, ..., bb, bbb, ... のようなパタンがあればマッチ) path_filter(c("aaa/bbb", "abc/def"), regexp = "(\\w)\\1+") #> aaa/bbb
また、invert = TRUE
にするとマッチしないものが返ってくる。
path_filter(c("aaa/bbb", "abc/def"), regexp = "(\\w)\\1+", invert = TRUE) #> abc/def
これも地味に便利(正規表現を書き間違えてハマるまでが様式美)
量が多くなってきたので、ここで一旦切ります。
path_
周りはようやく半分、です。折り返し。
fs
パッケージ、ファイルの操作・処理を行うときなどには必須になります。是非使いこなしましょう!1
Enjoy!!
私がね…↩
RStudioのkerasパッケージのREADMEにある、mnistのサンプルを keras.rstudio.com
drakeパッケージを使って動かしてみた、というだけの記録。
上記drakeパッケージのGitHubリポジトリのInstallation
の章を参照して、Bioconductorからgraphパッケージをインストールしてください。指示に従えば特に困ることはないはず、です。
ちょっと前に書いた記事の内容が、CRAN版でも必要になった、ということですね。
drakeパッケージは日々活発に開発がされていますので、GitHub版を追いかけるのもよいかもしれません。 まぁ、もうちょっと安定するまで触らなくてもよいのでは…げふんげふん
貼る意味あるんか…
plan <- drake_plan ( mnist = dataset_mnist(), x_train_ = mnist$train$x, y_train_ = mnist$train$y, x_test_ = mnist$test$x, y_test_ = mnist$test$y, # reshape & rescale x_train = array_reshape(x_train_, c(nrow(x_train_), 784))/255, x_test = array_reshape(x_test_, c(nrow(x_test_), 784))/255, y_train = to_categorical(y_train_, 10), y_test = to_categorical(y_test_, 10), model = keras_model_sequential() %>% layer_dense(units = 256, activation = 'relu', input_shape = c(784)) %>% layer_dropout(rate = 0.4) %>% layer_dense(units = 128, activation = 'relu') %>% layer_dropout(rate = 0.3) %>% layer_dense(units = 10, activation = 'softmax') %>% compile( loss = 'categorical_crossentropy', optimizer = optimizer_rmsprop(), metrics = c('accuracy')), history = model %>% fit(x_train, y_train, epochs = 30, batch_size = 128, validation_split = 0.2 ) )
でplanを作って、下記で可視化と実行、結果の確認。
config <- drake_config(plan) vis_drake_graph(config) make(plan) loadd(history) plot(history)
という感じでまぁ動いてよかったよかった…(?)
まぁ今更ですが、drake_plan()
の中では<-
ではなく=
を使う。同じ変数を左辺に2度置けない。kerasのようにlayerをいじっていけるような場合(再代入不要な場合)はそのまま書いても大丈夫そう?です。
なお、書いたら動いた、って感じなので、細かいところは追えていません。
drake
パッケージもいつの間にかREADMEがすごい成長していて、そろそろ読み直さないと…
キャッシュ消してしまえばよいのですが、どうも挙動が変な気が…。
先のconfig
を一度見てしまうと、plot()
できなくなります(再度loadd()
すればよいのだが…)
GitHub版では解決してるかもしれないし、こちらの環境かもしれないのですが。
いやまぁ、そもそもkerasの結果をdrakeで管理したいですかね?どうですかね…
ということで、やってみた系の記事でした。mnistは軽いので適当に実行して結果見るのに良いですね。
RからPython実行すればよいかーと思っていましたが、その場合はsnakemakeパッケージをPythonで使えばよさそう?(と、drakeのREADMEに書いてある)
Snakemake — Snakemake 5.1.5+0.gb3233c8.dirty documentation
が、reticulate
パッケージを介してRからPythonを動かせるので、これをやりたい。多分やればできるのでそのうちやる…。
と、いうことで・・・
Enjoy!!
これ直したんですけどまだリリースされてないんですよね...。宇宙本に注釈入れるべきか迷ったやつです。 https://t.co/UNSL4YhmvS
— Hiroaki Yutani (@yutannihilation) July 7, 2018
やはりユタ兄さんすごい(「これ直したんですけど…」とかいつか言ってみたい…)
ということで、CRAN版使っている方で、R3.5.xを使っていてWindows環境の方は要注意かなと。R3.4.xでは問題なかったのに…。
R3.5.0は結構悲鳴が聞こえていたので3.5.1まで待っていたのですが、まだ安定しないのだろうか…(R3.5.0で3.4.xよりも高速になったという話があったので期待しているんですけどねぇ…高速化の犠牲に色々バグが出てきてしまうと結局使うことをためらうことに…)
ユタ兄さんから補足が。
いままで文字コードを無視した実装になってたのがたまたまうまく動いていただけ、という感じです!
— Hiroaki Yutani (@yutannihilation) July 8, 2018
どうやら、R側に問題があるのではなく、readr側に問題があるようで、今までうまく動いていたのは「たまたま」っぽい。なので、readrだけでもgithub版を使う(そしてRは3.5.1を使う)が良いかもしれませんね。
Enjoy!!
場所はここです。
Teaching -> coursesのところからいける。PLLはRazaviベースなのでそうでもないが、Analog Design/Mixed Signalまわりは情報も新しそうだし良さげっすね。
Mixed Signalの良い日本語の資料ないですかねぇ…
スペインの大学の講義資料のようですが、このintroductionのスライドが半導体製造プロセス・製造ばらつき周りの資料として良かったので、メモ。
Design of Analog and Mixed Integrated Circuits and Systems (102726)
特に1のintroductionは毎年?更新されているようで、かなり最近のプロセス事情も反映している気がする。
自分も分かってない箇所が何か所かありますが、CMOSアナログ回路設計者は製造プロセス周りについて疎い人が多いので、こういった内容がまとまっているのは良い。というか、海外の大学ではちゃんと講義でやっている人が設計しているとなると、このあたりの知識がないというのは良くないのではー?と思っていますが。
1つ1つ説明する記事とか書いても良いかなと思ったんですが、まぁ需要もないしね…
ちなみに、タイトルのようにlecture note pdfで検索するとどこぞの大学の講義資料がヒットするので良いですね。
最近は動画とかも多いようだけど。
6月はお仕事が全然進捗なくてしんどかったので日記を書いている余裕がなかった。最終週でようやくアーキが固まり、実装が進んでいるのでとりあえずしばらくは気持ちの余裕がある。しかし、体力がない。体力がないとやる気も出てこない。困った。これは寝るしかない。
この仕事、どうしても体力が削られていく。日中ずっと座り仕事、帰ったら帰ったで勉強なりなんなりで自分で積極的に体力の増強を行わないとどんどんと体力が失われてしまうのだ。なんとかしよう。
で、何かRに関する日記でも書こうと思ったものの、「いや、書けることがない…」という気持ちになったので、一旦日記を挟んで気持ちをリセットする。
別に簡単なことを記録として書いても良いのだし、今2018年なのに…みたいなことは気にしなくて良いのだ。ただしpython2使いはダメ。3使え。
古い人間なので、いまだにアイディアは紙と鉛筆のスタイルである。ここ最近はA3のコピー用紙を裏表使って思いついたことを書き殴るスタイルの方が結果として色々なことに縛られないので良い気がしてきた。iPad Proで出来そうな気もするんだけど、まだ試していない。購入したのに全然使ってませんね。
回路図、数式、その他色々なアイディアを書いて、それをまとめるためには広い作業領域が必要なので、Proの大きい方でもちょっと狭いのですよね。とはいえA3サイズになったら重かろうな…。
あと、業務で私物は使えないからダメな気がする。やはりA3のコピー用紙に書き出すのが一番良い気がしますね。安いし。
久々に設計すると勘所を全て忘れてしまうので、やはりまとめておきたい。しかし、人の目に触れさせることは出来ないだろうなぁ…。 もくもくと書いていこう。
ということで、雑記の日記でした。
久々に仕事に関係ない文字を長々と書くとちょっと気持ち良いですね。