Tag Archives: Python

はじめに

この記事では、以下内容を記載しています。

  1. Ubuntu 18.04 LTSに、最新のChainer 5.1.0(2019/1/21 執筆時点)をインストールする
  2. GPUを設定する
  3. MNISTサンプルを実行する

私のデスクトップPCのスペックは以下の通りです。

  • マザーボード:ASRock Z370M-ITX
  • CPU:Intel Core i5 8400 BOX
  • GPU:NVIDIA GeForce GTX 1060 6GB (*1)
  • メモリ:DDR4-17000 8GB
  • SSD:M.2 256GB
  • 電源:SILVERSTONE SST-SX600-G
  • CPUクーラー:白虎 775-1366
  • ケース:RAIJINTEK METIS PLUS

 

このデスクトップPCは、Deep Learningを勉強するために、2018年3月に購入しました。
それぞれ安い部品をネットや実店舗で探して購入しました。パーツ代は合計で約10万円ちょいだったと記憶しています。

(*1) 当時、マイニングが流行っており、GPUがとても高価でした!今は当時と比べると1万円ほど安くなってました。。。

 

普段はノートPCからSSHでアクセスして動かしていますが、今回はデスクトップPC上で操作しています。

 

 

最新のChainerをインストールする

ターミナルを開き、以下コマンドを順番に入力してください。

 

これで最新のChainer がインストールされます。
もし5.1.0をインストールしたい方は、以下のようにコマンドを入力してください。

 

GPUを設定する

次にGPUをセットアップしていきます。
NVIDIAが提供しているCUDAというライブラリと、それに対応したGPUを利用することで、Chainerの学習時間を劇的に短縮できます。

学習内容や使用するGPUにもよると思いますが、私の場合、約5倍ほど早くなっています。
もしGPUをお持ちでしたら、設定することをおすすめします。

 

1. CUDAのインストール

以下ホームページにアクセスしてください。

https://developer.nvidia.com/cuda-toolkit

 

まず、”Downloard Now” をクリックします。

次に、環境に合わせて選択していきます。私は以下のように選択しました。

  • Operation System: Linux
  • Architecture: x86_64
  • Distribution: Ubuntu
  • Version: 18.04
  • Installer Type: deb(network)

 

Installer Typeを選択すると、下にDownloadのリンク先が”にょきん”と出てきますので、Downloadをクリックします。
2.9KBしかないので、一瞬で終わります。

 

ダウンロードが終わったら、今度はそいつを展開し、インストールしていきます。
デフォルトではダウンロードディレクトリにあるはずです。

今回はひとまずホームディレクトリに移動し、CUDAをインストールします。
再びターミナルを開き、以下コマンドを順番に入力してください。

 

私はこの手順でやったところ、何故かエラーが発生し、インストールできませんでした。
このコマンドを打って再インストールしたところ、無事にCUDAがインストールできました。

インストール後は、PCを再起動してください。

再起動後、ターミナルを開き、以下コマンドを入力してみてください。

 

以下のような表示がされれば、インストール成功です。
この表示をやめる場合は、Ctrl + c を入力してください。

 

2. cuDNNのインストール

cuDNNはNVIDIAが公開しているディープラーニング用のライブラリです。

以下ホームページにアクセスしてください。

https://developer.nvidia.com/cudnn

Download cuDNNをクリックします。

 

するとメンバーシップ登録の画面が出てきます。
初めての方はJoinをクリックし、メンバーシップ登録してください。
私は過去にダウンロードしたことがあり、メンバーシップになっているのでLoginをクリックしました。

自身のアカウントでログインすると、以下画面が開きます。

 

cuDNN Software License Agreementにチェックします。

すると”にょきっと”選択画面が出てくるので、cuDNN v7.4.2 をクリックします。

 

するとさらに、”にょきっと”選択画面が出てくるので、以下の3つをクリックし、それぞれインストールします。

  • cuDNN Runtime Library for Ubuntu18.04 (Deb)
  • cuDNN Developer Library for Ubuntu18.04 (Deb)
  • cuDNN Code Samples and User Guide for Ubuntu18.04 (Deb)

 

 

ダウンロードが終わったら、今度はそいつらを展開し、インストールしていきます。
デフォルトではダウンロードディレクトリにあるはずです。

今回はひとまずホームディレクトリに移動し、cuDNNをインストールします。
再びターミナルを開き、以下コマンドを順番に入力してください。

 

3. CuPyのインストール

最後にCuPyをインストールします。
CuPyは、行列計算をするためのモジュールです。

Pythonで行列計算を行う場合、通常はNumpyを使うと思いますが、これはCPUでしか計算できません。
このCuPyはGPUで計算することが可能です。

 

再びターミナルを開き、以下コマンドを入力してください。

これだけです。

以上でGPUの設定が完了しました。

 

 

MNISTサンプルを実行する

最後に動作確認も兼ねて、Chainerが用意してくれている、MNISTサンプルを実行してみます。
MNISTとは、手書きの数字画像とテスト画像を集めた画像データのセットです。

 

再びターミナルを開き、以下コマンドを順番に入力してください。

これでMNISTサンプルのダウンロード&展開が完了です。

 

次にこのサンプルを実行していきます。
まずはCPUを使って学習させてみましょう。以下コマンドを入力してください。

 

するとこんな画面が出てきます。

 

次にGPUを使って学習させてみます。以下コマンドを入力してください。

-gの後の数字について記載しておきます。
この数字には、GPU番号を指定します。

あなたのGPU番号は以下コマンドで確認できます。

このコマンドを打つと、以下画面が表示されます。
ここのGPUという箇所を見てください。この例の場合は0なので、GPU番号は0です。

 

コマンドを入力すると、以下のような画面が出てきます。

 

elapsed_timeが実行時間です。
CPUの実行時間と比較すると、GPUの方が3.5倍ほど早いことがわかります。

それぞれのパラメータについては、今回のスコープからは外れるので、また別の機会とさせてください。

これらがきちんと実行されれば、Chainerのインストール及び、GPUの設定はうまくいっています。
おつかれさまでした。

 

以上です。

この記事がいいねと思ったら、以下のいいねボタンを押してください。
管理人のモチベーションがあがります(笑)

いいね! ←この記事いいね!
Loading...

はじめに

先日、Pythonを使って、データを解析する機会がありました。
そんな時、「簡単なサンプルコードがあったら便利だ」と感じたため、ブログに残しておこうと思います。
サンプルコードは好きに使ってもらって構いません(大したコードではないので)
「もっとこうしたらいいのに」というご意見がありましたら、コメント欄までお願いいたします。

私の環境は以下の通りです。

  • Windows 10 64bit
  • Anaconda3 5.3.0
  • Python 3.7.0

 

例題

今回、例として用意した解析元のデータは、過去の気象データです。
この気象データは、気象庁のホームページから誰でも無料でダウンロードできます。

過去の気象データ・ダウンロード
https://www.data.jma.go.jp/gmd/risk/obsdl/index.php

ここでダウンロードできる気象データはCSVです。
Pythonはモジュールを使えばCSVも簡単に使いこなせるのですが、今回はテキストに落とし込んでいます。
(CSVファイルを開いて、テキストエディタにコピペしただけです)
以下に、解析元データ(気象データ)の一部抜粋を添付します。
この気象データを今回3つ用意しました。

weather_data1.txt / weather_data2.txt / weather_data3.txt :

ここから日付と平均気温のみを抽出することが、今回の課題です。
日付は一番左の列、平均気温は日付の隣の列です。他は不要なデータとします。

 

サンプルコード

サンプルコードは以下の通りです。

 

一つ一つ解説します。

これは、正規表現を使うようにするためのライブラリです。

 

これはファイル名です。今回ファイルが3つあるので、in_filesというリストに格納しています。

 

in_filesというリストから、ファイル名を一つ取り出してin_fileに入れています。
with openを使ってファイルを開きます。
第一引数にはファイル名を、第二引数は読み込み用でファイルを開くことを指定しています。

‘r’ とすれば、読み込みモード
‘w’ とすれば、書き込みモード
‘a’ とすれば、追記モード

ちなみにwith openで開いたファイルは、Closeが不要です。
as frで、開いたファイルを以降、frとして扱います。
for line in frで、1行ずつファイルを読み込むことができます。

 

re.matchは、文字列の先頭がパターンにマッチするかを調べます。
第一引数は検索したい正規表現を、第二引数は検索元を入力します。

正規表現の中で、カッコで囲んでいる箇所があります。
こうすることで、カッコで囲まれた部分にマッチした文字列を、”group(番号(1始まり))”とするだけでタプルで取得できます。
今回は、日付をgroup(1)、気温をgroup(2)としています。
この検索結果をm1に格納します。もし見つからなければm1にはNoneが入ります。

 

m1がNone以外、すなわち見つかった場合、日付と平均気温を出力します。
まず出力ファイル名を決めます。今回はファイル名に’convert.txt’を追加したものにしました。

出力ファイルを”追記モード”で開いて、それをfaとして扱います。
次にfa.writeで出力ファイルに書き込みます。

m1.group(1)は日付を、m1.group(2)は平均気温を意味します。
日付と平均気温の間には、タブを入れました。最後に改行をしています。

 

出力結果

以下が出力結果です。
ファイルと同じフォルダに、出力ファイルが生成されていると思います。
日付と平均気温だけが綺麗に抽出できています。

weather_data1convert.txt / weather_data2convert.txt / weather_data3convert.txt

 

以上です。

この記事がいいねと思ったら、以下のいいねボタンを押してください。
管理人のモチベーションがあがります(笑)

いいね! ←この記事いいね!
Loading...

はじめに

Pythonを使って、UART等のシリアル通信を行う場合、PySerialを使うと簡単に実現できます。
その際、PySerialを使う前の初期設定で、COMポートを指定する必要があります。

COMポートはデバイス毎に番号が変わってしまいます。
デバイスが変わる度に、デバイスマネージャからCOMポートを調べるのは面倒です。

そこで今回は、COMポートを自動的に取得するサンプルプログラムをご紹介します。
ついでに、PySerialを使ったシリアル通信のサンプルプログラムも掲載しています。
サンプルプログラムはご自由にお使いください。

私の環境は以下の通りです。

  • Windows 10 64bit
  • Anaconda3 5.3.0
  • Python 3.7.0

 

サンプルコード

まずはMain関数を説明します。

ヘッダに”serial”をimportすることで、PySerialを使用することができます。
search_com_port()は私が作成した関数です。
後ほど説明しますが、この関数は有効なCOMポートを返します。

serial.Serial関数は、serというインスタンスを作成しています。
この関数の引数には、有効なCOMポートを指定する必要があります。
その他、baundrateや、通信のタイムアウト時間を設定しています。

w_dataは、送信するデータです。
r_sizeは、受信するデータのサイズです。
uart_write_read関数は、私の作成した関数です。この中でデータの送受信を行います。

 

次に、search_com_port関数を説明します。

serial.tools.list_ports.comports関数は、PCに接続されているCOMポートをすべて返します。
それをcomlistというリストにいったん格納(append)します。

私の使用しているPCでは、使いたいCOMポートがcomlist[0]に格納されていたため、それを一旦、use_portに格納します。関数の最後で、use_portを戻り値として返しています。

 

次に、uart_write_read関数を説明します。

ser.write関数は、データを送信する関数です。これはPySerialで用意している関数です。

ser.read_until関数は、データを受信する関数です。これはPyserialで用意している関数です。
この関数の引数に、受信サイズを指定すると、指定サイズが受信されるまで待ってくれます。

最後に受信データを返しています。

 

最後に今までのソースコードをまとめて記載すると、以下のようになります。

以上です。

この記事がいいねと思ったら、以下のいいねボタンを押してください。
管理人のモチベーションがあがります(笑)

いいね! (11いいね!)
Loading...