20210113のMacに関する記事は7件です。

M1 Macbook Air (Big Sur)が届いたら最初にやること。

最速組からふた足遅れてM1搭載Macbook Airを購入しました。MBP13(2013late)からの買い替えです。

以前にも2016MBPを職場で支給された時にやることをまとめましたが再まとめです。

開発環境の構築はこちらで→【随時更新】Apple Silicon (M1)での開発環境

キーボード

Karabiner-Elements導入

  • Complex modifications > Add rules > Import more rules from the Internet
    • International (Language Specific) > For Japanese (日本語環境向けの設定) (rev 5)をインポート
    • コマンドキーを単体で押したときに、英数・かなキーを送信する。を有効化
  • Simple modifications
    • Target deviceをApple Internal Keyboard / Trackpadに切り替え
    • caps_lockleft_commandに設定

トラックパッド

システム環境設定 > トラックパッド

  • タップでクリックをチェック
  • 調べる&データ検出3本指でタップに変更

システム環境設定 > アクセシビリティ > ポイントコントロール

  • トラックパッドオプション > ドラッグを有効にするをチェック
  • トラックパッドオプション > 3本指のドラッグに変更

識別名の変更

システム環境設定 > 共有

  • コンピュータ名を変更

日本語変換

システム環境設定 > キーボード > 入力ソース

  • 日本語 - ローマ字入力
    • ライブ変換のチェックを外す
    • 数字を全角入力のチェックを外す

システム環境設定 > キーボード > ユーザ辞書

  • スマート引用符とスマートダッシュを使用のチェックを外す

システム環境設定 > キーボード > ショートカット > 入力ソース

  • 前の入力ソースを選択のチェックを外す
  • 入力メニューの次のソースを選択のチェックを外す

Ctrl+Spaceを後でiTerm2の起動ショートカットに割り当てたいので。

仮想デスクトップ

システム環境設定 > Mission Control

  • 最新の使用状況に基づいて操作スペースを自動的に並べ替えるのチェックを外す

ホットコーナー

システム環境設定 > Mission Control > ホットコーナー

  • 左下に画面をロックを割り当て

Dockとメニューバー

システム環境設定 > Dockとメニューバー

  • Dockとメニューバー
    • サイズを少し小さく
    • 画面上の位置を左に
  • サウンド
    • 使用中のみ常にに変更
      • 音を出力しても表示されなかった。使用中と判定される条件がわからない
  • バッテリー
    • 割合(%)を表示

Finder

Finder > 環境設定 > サイドバー

  • 最近の項目のチェックを外す
  • (ユーザーホーム)にチェックを入れる

Finder > 環境設定 > 詳細

  • すべてのファイルの拡張子を表示にチェックを入れる
  • 30日後にゴミ箱から項目を削除にチェックを入れる

表示

  • パスバーを表示
  • ステータスバーを表示

Safari

表示

  • ステータスバーを表示

    Safari > 環境設定 > 一般

  • Safariの起動時最後のセッションの全ウィンドウに変更

  • 履歴からの削除1ヶ月後に変更

Safari > 環境設定 > タブ

  • ⌘+1から⌘+9でタブを切り替えるのチェックを外す

Safari > 環境設定 > 詳細

  • WEBサイトの完全なアドレスを表示にチェックを入れる
  • デフォルトのエンコーディングUnicode (UTF-8)に変更
  • メニューバーに"開発"メニューを表示にチェックを入れる

アンインストール

  • iMovie
  • GarageBand
  • Pages
  • Numbers

必要になったら入れ直す

ドックの整理

使用頻度の低いアプリを削除

  • Podcast
  • Music
  • TV
  • 連絡先
  • カレンダー
  • FaceTime
  • マップ
  • メール
  • メッセージ

順番の入れ替え

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

パスを通すとは

前提

macのterminalでパスを通す方法.
zsh: command not found: コマンド名 というエラーが出た時の対処法です.

デフォルトのシェルを確認

macのシェルにはbashとzshがあります.

$ echo $SHELL

パスを通すとは

コマンドが格納されているディレクトリを登録しておくこと.

手順

1. 通っているパスを確認

$ echo $PATH

2. パスの追加

#bashの場合
$ open ~/.bash_profile
#zshの場合
$ open ~/.zshrc
$ export PATH=/xxxx/bin:$PATH
#bashの場合
$ source ~/.bash_profile
#zshの場合
$ source ~/.zshrc

3. パスの確認

$ コマンド --version
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

シェルでコマンドを実行中は Mac をスリープさせないようにする方法

:warning: この記事は macOS 専用です。

:information_source: Linux でも、macOS の caffeinate コマンドと同等のコマンドがあれば使えるかもしれません。もしご存じの方がいたらコメントで教えていただけるとありがたいです。

はじめに

シェルを操作しているときに、たまに時間がかかるコマンドを実行することがあると思います。

その際にコマンド終了まで放置していると Mac がスリープしてしまうことがあります。

もしかしたらシステムはスリープしていなくて、ディスプレイだけがスリープしているのかもしれませんが、ディスプレイがスリープしていると、コマンドが中断されてしまっているのではないかと不安になりますし、ときおりコマンドの進捗状況を確認したくてもスリープしていてわからないことがあります。

そこで、コマンド実行中は Mac がスリープしない (ディスプレイのスリープも含む) ようにする方法を紹介します。

環境

  • macOS Big Sur 11.1
  • Zsh 5.8

設定方法

以下を ~/.zshrc に貼り付けます。

:warning: ~/.zshrc の該当部分だけを抜き出して貼り付けているので、下記の ~/.zshrc 単体での動作は確認していません。もし正常に動作していなければコメントで教えてください。

~/.zshrc
_tn_cmd=''
need_caffeine=true
_tn_caffeinate_pid=''

preexec() {
  _tn_cmd=$1
  need_caffeine=true

  while read line
  do
    if [[ $_tn_cmd =~ ^([[:blank:]]+.*)*$line([[:blank:]]+.*)*$ ]]; then
      need_caffeine=false
    fi
  done < ~/.decaffeinated_command_list

  if type caffeinate 1>/dev/null 2>/dev/null && "${need_caffeine}"; then
    (caffeinate -d & echo $!) | read _tn_caffeinate_pid
  fi
}

precmd() {
  if "${need_caffeine}" && [[ "$_tn_caffeinate_pid" =~ ^[0-9]+$ ]]; then
    kill "$_tn_caffeinate_pid"
  fi
  _tn_caffeinate_pid=''
}

次に、~/.decaffeinated_command_list というファイルを作ります。

$ touch ~/.decaffeinated_command_list

そして、~/.decaffeinated_command_list に以下を書き込みます。

~/.decaffeinated_command_list
exit
exec
source
script

とりあえず設定方法だけ知りたい方はこれで終わりです。

解説

ここから先は具体的な解説をします。

caffeinate コマンド

Mac には caffeinate というコマンドが用意されています。このコマンドを実行すると Mac をスリープさせないようにすることができます。

caffeinate コマンドのオプション

オプション 効果 備考
-d ディスプレイをスリープさせないようにします
-i システムをアイドル状態にさせないようにします
-m ディスクをスリープさせないようにします
-s システムをスリープさせないようにします MacBook の場合、電源に接続されているときのみ有効

今回はディスプレイをスリープさせたくないので、-d を指定します。

preexec()precmd()

~.zshrcpreexec() という関数を用意すると、何かしらのコマンドの実行前に preexec() の中身が実行されます。

また、precmd() という関数を用意すると、コマンドの終了後 (厳密には新しいプロンプトが表示される直前) に precmd() の中身が実行されます。

これを利用して、インタラクティブシェルでコマンド実行前に caffeinate コマンドをバックグラウンドで実行しディスプレイのスリープを抑制し、コマンド終了後に caffeinate コマンドのプロセスを kill します。

~/.decaffeinated_command_list について

~/.decaffeinated_command_list というファイルを作りましたが、これは caffeinate コマンドを実行しないコマンドのリストです。

~/.decaffeinated_command_list を再掲します。

~/.decaffeinated_command_list
exit
exec
source
script

たとえば、exit コマンドがこのリストの中に入っているので、インタラクティブシェルで exit コマンドを実行したときは caffeinate コマンドは実行されないというわけです。

こうしておかないと caffeinate コマンドのプロセスが残り続ける (ずっとスリープしなくなる) ことになります。

exit コマンドでシェルを終了したり、exec コマンドや source コマンドでシェルや ~/.zshrc を再読み込みしたりした場合、コマンド実行前に preexec() の中身は実行されますが、precmd() の中身は実行されません。

ということは、preexec() が実行されて caffeinate コマンドが実行されるのは良いものの、precmd() が実行されないので caffeinate コマンドのプロセスが残り続けてしまいます。こうすると不眠不休の Mac になってしまいます。

それを避けるために、preexec() は実行されるが precmd() が実行されないようなコマンドは ~/.decaffeinated_command_list に入れておくことをおすすめします。

なお、上記の理屈により、ssh で別のマシンにログイン中も Mac はスリープしません。SSH 先では caffeinate コマンドが使えないので、SSH 接続中はずっとスリープしないようにしても良いと個人的には思っていますが、これが気に入らない場合は ssh~/.decaffeinated_command_list に追加してください。

他にも、manlessvim を開きっぱなしにして放置している間にスリープしてほしい場合は、それらを ~/.decaffeinated_command_list に追加してください。

$! について

(caffeinate -d & echo $!) | read _tn_caffeinate_pid

$! にはバックグラウンドプロセスのうち、直前に実行されたプロセスのプロセス番号が入っています。

上記のスクリプトでは、caffeinate -d &caffeinate コマンドがバックグラウンドで起動したので、$! には caffeinate コマンドのバックグラウンドプロセスのプロセス番号が入っています。

そのプロセス番号を _tn_caffeinate_pid に代入しています。コマンド終了時に precmd() でこのプロセス番号を指定して kill しています。

pkill caffeinate ではダメな理由

プロセス番号を保持しなくても pkill caffeinate を使えば caffeinate コマンドのプロセスを kill することはできます。

しかしそれだと、別のシェルセッションで実行中の caffeinate コマンドのプロセスも一緒に kill されてしまいます。

たとえばシェルセッションを 2 つ起動していて、片方で時間がかかるコマンドを実行させていて、もう片方で別の作業をしていたとします。

もし pkill caffeinate を使っていた場合、作業している側のシェルで caffeinate コマンドのプロセスをすべて kill してしまっているので、もう片方の、時間がかかるコマンドがまだ終了していなくてもスリープしてしまいます。

作業の合間に休憩しようとしてスリープしてしまうことになります。

それを防ぐために、ちゃんとプロセス番号を保持して、そのコマンドを実行したときの caffeinate コマンドのプロセスだけを kill するようにします。

おまけ: caffeinate コマンドの起動と終了のチェック

コマンド実行前に、本当に caffeinate コマンドが実行されるのかどうか、そして終了後にちゃんとプロセスが kill されているのかが気になるかもしれません。

その場合は以下を ~/.zshrc に追記します。

~/.zshrc
+ export PROMPT_STATE=""
+
+ caffeine_count() {
+   echo -e "\033[38;05;172m$(ps aux | grep caffeinate | grep -cv grep)\033[00m"
+ }
+
+ get_prompt_state() {
+   PROMPT_STATE="☕️ $(caffeine_count)"
+ }
+ get_prompt_state

  _tn_cmd=''
  need_caffeine=true
  _tn_caffeinate_pid=''

  preexec() {
    _tn_cmd=$1
    need_caffeine=true

    while read line
    do
      if [[ $_tn_cmd =~ ^([[:blank:]]+.*)*$line([[:blank:]]+.*)*$ ]]; then
        need_caffeine=false
      fi
    done < ~/.decaffeinated_command_list

    if type caffeinate 1>/dev/null 2>/dev/null && "${need_caffeine}"; then
      (caffeinate -d & echo $!) | read _tn_caffeinate_pid
    fi
+
+   if "${need_caffeine}"; then
+     if ! { [ "$(ps aux | grep caffeinate | grep "$_tn_caffeinate_pid" | grep -cv grep)" -eq 1 ] && [[ "$_tn_caffeinate_pid" =~ ^[0-9]+$ ]]; } then
+       echo -e "\033[1;93mWARNING:\033[00m Running out of caffeine! Computer may sleep while executing \`\033[1m$_tn_cmd\033[00m' if it takes long time\033[00m"
+       echo
+     fi
+   fi
  }

  precmd() {
    if "${need_caffeine}" && [[ "$_tn_caffeinate_pid" =~ ^[0-9]+$ ]]; then
      kill "$_tn_caffeinate_pid"
    fi
    _tn_caffeinate_pid=''
+
+   get_prompt_state
  }

preexec() では、以下のいずれかの条件がそろっているときに、コマンド実行前に caffeinate コマンドが実行されていないという警告を出します。

  • 文字列 "caffeinate" と、直前のバックグラウンドプロセスの番号で grep したときに caffeinate コマンドのプロセスが 1 件ではない
  • caffeinate コマンドのバックグラウンドプロセス番号を保持する $_tn_caffeinate_pid の中身が数値ではない (空文字列などになっている)

また、precmd() では get_prompt_state() を呼び出していて、この関数で環境変数 PROMPT_STATE をセットしています。

PROMPT_STATE には caffeine_count() の実行結果が入っていて、caffeine_count()caffeinate コマンドのプロセスの数を返します。

あとはこれを環境変数 PROMPT の中に入れておけば、常にプロンプトに caffeinate コマンドのプロセスの数が表示されます。

ぼくは Starship を使っているので、環境変数 PROMPT に入れる代わりに Starship の env_var モジュールにセットしています。

~/.config/starship.toml
[env_var]
variable = "PROMPT_STATE"
default = "???"
style = "bold yellow"

これで以下のように表示されます。

スクリーンショット 2021-01-13 18.44.02.png

"☕️ 0" と表示されていますね。caffeinate コマンドのプロセスがないことがわかります。ここの数字が 1 以上だった場合は、別のシェルセッションで何かしらのコマンドが実行されているので今はスリープしないということを表しています。

Bash や Linux では使えないのが弱点

Bash だと Bash-Preexec を使えば Zsh の preexec()precmd() 相当のことができるのですが、試してみたところ、残念ながら正しく機能しませんでした。

理由はわかりませんが、Bash-Preexec でバックグラウンドプロセスに回すような処理を書くと、インタラクティブシェルでパイプを使ったときにコマンドがストップしてしまいます。

~/.bashrc
[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh

preexec() {
  # バックグラウンドで実行する処理を書く
  caffeinate -d &
}
$ ps aux | grep caffeinate
# 処理がストップしてしまう

もしかしたらこれはバグかもしれないので、今後修正されるかもしれません。

Fish に関しては試していないのでわかりませんが、--on-event fish_preexec--on-event fish_postexec が、それぞれ Zsh の preexec()precmd() に似ているので代用できるかもしれません。

参考: シェルでコマンドの実行前後をフックする

また、この caffeinate コマンドは macOS (Darwin) 専用なので Linux では使えません。Linux にも caffeinate コマンド相当のコマンドがあれば使えると思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

WindowsからMacOSをSSH経由でシャットダウンさせる

リモートで作業中に切断され、復旧できなかったときに(仕方なく)再起動する方法を残す。

環境
・Windows10(接続元)
・Mojave10.14.6(接続先)

前提

MacOSは「リモートログイン」の設定(システム環境設定→共有)を行っていること。

作業

・Windows10から下記コマンドを実行する

c:¥>ssh -l (Login) (IPAddress)

途中Yes/Noとパスワードを聞かれる。

・・・
Are you sure you want to continue connecting (yes/no)? yes
Password:(パスワード入力)

ログインしたら、続けて下記のコマンドを実行することでシャットダウン(再起動)する

(host):~ (Login)$ sudo shutdown -r now
Password:(パスワード入力)

成功したら下記メッセージが出る

Shutdown NOW!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

KiCAD(Mac版)でFreeroutingを使って自動配線する (2021年1月時点最新手法)

はじめに

オープンソース開発環境、かつ、ハードウェアを開発する環境として、充実の機能を提供をしてくれるKiCADについて、さらにより良く開発を進めるための思考錯誤を記録しています。
(誰かの何かに役立てば。。)

この記事は

KiCADで部品数が多いなどある程度の規模になってきた際に、実際に民生品や産業用と向け商用開発とかで良く行っている、部品間の配線つなぎを可能な限り自動でやりたい!と感じて、纏めている記事となります。

先人の方々のお陰でKiCAD-自動配線ツールのダウンロード・インストール方法を筆頭に、参考となる良記事(文末参考文献をご参照)がありますが、いずれもWindowsでの実施方法であり、Macにて自動配線を行う場合には、いくつか工夫が必要でしたので、本記事纏めております。
なお、この記事では

  • KiCAD(Mac版) Version: (5.1.8-0-10_14), release build
  • Freerouting Version: 1.4.4
  • JAVA Version: openjdk version "11.0.9" 2020-10-20

にて実施しています。

どういった人向けか

KiCADを使って基板(PCB(=Print Circuti Board)とも言います)を設計している方向けの記事です。

まずぶつかった壁

KiCADで自動配線を行うためにはFreeroutingというツールをインストールし、KiCADと組合せて使う必要があるのですが、Mac版のFreeroutingは

のいずれかにてMac向けのfreerouting-1.4.4-macos-x64.dmgという.dmg形式のインストールファイルが入手できるので、その流れでインストールを進めても

install_NG_1.png

install_NG_2.png

といった形で"Freerouting.appは壊れているため開けません。"となってしまい、インストールが上手く出来ませんでした。(Macに.appファイルをコピーして実行しても同様…)

どう乗り越えたか

何度実施してもダメなため、Freeroutingについては、Java版を用いる事としました。
以下がインストール(および実行)手順です。

Freerouting Java版の入手

Freerouting Java版はこちらにて入手可能です。
このページにて

freerouting_java_installer

の様な形でfreerouting-1.4.4-executable.jarをダウンロードしてください。
これで、Java版の実行ファイルの入手が出来ました。

Freerouting Java版実行の事前準備(JAVA 11を有効化)

次に重要だったのが、Java版での実行となるため、Macに適切なJAVAバージョンを有効化しておく事が必要となります。
ハードエンジニア寄りの当方にとって、Javaについては当方もまだ学びの最中で詳しく無いのですが、単純にGUIインストールしたりbrewインストールしただけだと、現行最新版がインストールされてしまうと思います。
このまま進めてしまうと、今回のFreerouting Java版は動作不可でしたので、JAVA11をインストール、かつ有効化する事をまずは進めます。
JAVA11の有効化については以下が非常に参考となりました。

当方としては、jenvを用いて、Freeroutingを用いる際にJAVA11にスイッチングする形をとりました。以下がその動作例となります。(この例では、JAVA11を有効化しつつ、JAVA8にいつでも切り替えられるイメージです)

スクリーンショット 2021-01-13 13.16.08.png

Freerouting Java版の実行方法

ここまで来たら後はFreerouting Java版の実行とのことでfreeroutingでKiCadのPCBを自動配線する時に、手動で最後のひと押しをする方法を参考にしつつ、以下コマンドを打つことで、Freerouting GUIが立ち上がると思います。

java -jar freerouting-1.4.4-executable.jar

やっと立ち上がった様子がこちら。

Freerouting_execution.png

いざKiCADとの連携

で、いよいよ、ここからのKiCADとの連携については

KiCAD-自動配線ツールの使い方

が非常に分かりやすいですので、こちらを参考とさせて頂きながら

  1. KiCADのpcbnewにて、specctra DSN(.dsn)ファイルをエクスポート(出力)
  2. Freeroutingにて、1.でエクスポートしたspecctra DSN(.dsn)ファイルをインポート(読み込み)
  3. Autorouterボタンをクリック
  4. Freeroutingにて、specctra session fileをエクスポート(出力)
  5. KiCADのpcbnewにて、5.でエクスポートしたspecctra session fileをインポート(読み込み)
  6. 自動配線完了!

の流れで出来ると思います。
なお、まれにAutorouterボタンをクリックしてエラーになったことがありましたが、エラーとなっている結線のみを手動で一本引いてあげる事で、エラー回避してそれ以外は自動配線完了、という事も出来ましたのでご参考まで。

さいごに

Mac環境においても、無事、部品間の配線つなぎを可能な限り自動で行うことが実現出来ました。

参考文献・リンク

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Mac 読み上げ言語を切り替えるshell script

読み上げ言語の切り替え

日本語だったら英語に、英語だったら日本語に切り替えるためのシェルスクリプトです。

automatorに実行させて、ショートカットで動くようにしています。
スクリプトを直接実行させると反映されなかったので、シェルをファイルに保存して、bash speech.shのように実行させています。

#!/bin/sh

SelectedVoiceID=`/usr/libexec/PlistBuddy -c "print SelectedVoiceID" ~/Library/Preferences/com.apple.speech.voice.prefs.plist`

if [ $SelectedVoiceID != 369275117 ]; then
    /usr/libexec/PlistBuddy -c "set SelectedVoiceID 369275117" ~/Library/Preferences/com.apple.speech.voice.prefs.plist
    /usr/libexec/PlistBuddy -c "set SelectedVoiceCreator 1886745202" ~/Library/Preferences/com.apple.speech.voice.prefs.plist
    /usr/libexec/PlistBuddy -c "set SelectedVoiceName Kyoko" ~/Library/Preferences/com.apple.speech.voice.prefs.plist
else
    /usr/libexec/PlistBuddy -c "set SelectedVoiceID 184560141" ~/Library/Preferences/com.apple.speech.voice.prefs.plist
    /usr/libexec/PlistBuddy -c "set SelectedVoiceCreator 1886745202" ~/Library/Preferences/com.apple.speech.voice.prefs.plist
    /usr/libexec/PlistBuddy -c "set SelectedVoiceName Ava" ~/Library/Preferences/com.apple.speech.voice.prefs.plist
fi

killall com.apple.speech.speechsynthesisd
killall SpeechSynthesisServer
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

M1 Macに機械学習環境を最速で構築してみた (conda, jupyter notebook, tensorflow)

はじめに

M1対応のtensorflowを使うにはApple公式のGithubリポジトリ(Apple/tensorflow-macos)からパッケージをダウンロードして一つ一つインストールするなど面倒だったのですが、conda-forgeにまとまったパッケージがあったのでそれを使ってM1 MacbookにM1対応のtensorflowをjupyter上で実行できる環境を構築する方法をメモします。(1/12/2021 現在)

この記事では

  1. Jupyter Notebook上でM1対応のtensorflowを実行する簡単な方法を紹介します。
  2. 実際にM1のGPUを使って学習してみます。

目次

  1. tensorflowを実行する環境を構築する
  2. tensorflowを使ってみる
  3. 参考文献

tensorflowを実行する環境を構築する

anaconda環境をインストール

まずは下のGitHubページの、OS X arm64 (Apple Silicon) Miniforge3-MacOSX-arm64を選び、Miniforgeのインストーラーをダウンロードします。
conda-forge/miniforge

ダウンロードしたMiniforge3-MacOSX-arm64.shを使ってターミナルからMiniforgeをインストールします。

$ bash Miniforge3-MacOSX-arm64.sh

必要なパッケージをインストール

# m1用tensorflowを含んだconda環境の作成、起動
$ conda create -n python38 tensorflow-addons tensorflow -c isuruf/label/tf -c conda-forge
$ conda activate python38

# Jupyter notebookのインストール
$ conda install -n python38 -c conda-forge notebook
$ conda install -n python38 -c anaconda ipykernel

# Jupyter Notebookに現在のpython環境をセット
$ python -m ipykernel install --user --name=python38

Jupyter notebookを起動し、pythonファイルからtensorflowがインポートきれば成功です。

$ jupyter notebook .
import tensorflow as tf

tensorflowを使ってみる

Jupyter上でPythonファイルを作り以下のコードを実行します。

import tensorflow.compat.v2 as tf
mnist = tf.keras.datasets.mnist
import time

tf.enable_v2_behavior()

from tensorflow.python.framework.ops import disable_eager_execution
disable_eager_execution()

from tensorflow.python.compiler.mlcompute import mlcompute
mlcompute.set_mlc_device(device_name='gpu')

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test  = x_test.reshape(x_test.shape[0], 28, 28, 1)

model = tf.keras.models.Sequential([
  tf.keras.layers.Conv2D(1024, (3,3), activation='relu', input_shape=(28, 28, 1)),
  tf.keras.layers.MaxPooling2D(2,2),
  tf.keras.layers.Conv2D(512, (3,3), activation='relu'),
  tf.keras.layers.MaxPooling2D(2,2),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(256, activation='relu'),
  tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

start = time.perf_counter()
model.fit(x_train, y_train, epochs=5)
end = time.perf_counter()
print("Elapsed time : {0} s.".format(end-start))

model.evaluate(x_test, y_test)

20分ほどで学習が終わりました。
device_name='gpu'とするのを忘れるとCPUが使われて遅くなってしまいます。

mlcompute.set_mlc_device(device_name='gpu')

参考文献

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む