Swift for TensorFlowでMNIST -Fully Connected NN- (更新予定)

今回はS4TFでMNISTを解く。Convは次回予定。

前提 ディレクトリ構造は次のようになっているとする。

├── Resources
│   ├── t10k-images.idx3-ubyte
│   ├── t10k-labels.idx1-ubyte
│   ├── train-images.idx3-ubyte
│   └── train-labels.idx1-ubyte
├── main.swift
└── utils.swift

MNISTは公式のコードを参考にいくつかの変更を加えて書いています。

まず、 utils.swift 内のコードは公式が公開している該当コードと変わりありません。 変更点は、Swift for TensorFlow の Dataset API を一応利用している点です。

Swift for TensorFlow MNIST

工事中...

S4TFの基本のき

この前の続き。あとあと更新する予定

Tensorの宣言

PyTorch と S4TFのTensorの宣言を比較しながら見ていきます。

  • PyTorch
import torch
a = torch.tensor([1, 2, 3, 4, 5])
np_a = a.numpy()    # NumPy配列にする。
  • Swift for TensorFlow
import TensorFlow
import Python                     // PythonObjectを使う際は
PythonLibrary.useVersion(3, 6)    // これが必須みたい

var a: Tensor<Float> = Tensor<Float>([1, 2, 3, 4, 5])
// var a = Tensor<Float>([1, 2, 3, 4, 5])    // こっちでもOK
var np_a: PythonObject = a.makeNumpyArray()    // NumPy配列にする。

Swiftは静的型付け言語なので型宣言をします。なお、var で宣言した場合、変数、 letは定数です。

Tensorを宣言する際、Tensor<Float> 以外にも Tensor<Double>Tensor<Int32> 等が可能。

自動微分

Swift for TensorFlowで自動微分を行うには以下のような手段がある。

@differentiable(wrt: x)
func f(x: Float) -> Float {
    return x * x
}

let df = gradient(of: f)

print(f(x: 5.0))    // 25.0
print("関数f を微分した結果: \(df(5.0))")      // 10.0

さっき見たらなんか、TensorFlowの公式ページかっこよくなって、TF 2.0のチュートリアルもPyTorchのそれ見たく色々書いてあって良くなってる!

www.tensorflow.org

Swift for TensorFlowを触る

 すっごい久しぶりのブログ更新です。最近になって、Swift for TensorFlowのmacOS向けpre-builtパッケージが一応リリース扱いになったり、Colabで利用できるようになったり、今週予定されているTensorFlow Dev Summit 2019の初日のトリにSwift for TensorFlowが予定されていたりと最近開発が活発化してきているので、自称 日本で唯一Swift4TFを最初期から追っかけてきた人間 としては嬉しい限りです。

 この記事の目的は、Swift for TensorFlowを簡単に触れてみたり、自分がぶち当たった問題等をまとめておくことです。

Swift for TensorFlowとは

 GoogleがSwiftの始祖 Chris Lattner氏をとっ捕まえてきてAppleの Swift言語を拡張する形でTensorFlowを統合した新しいプログラミング言語

Swift for TensorFlow is a next-generation platform for machine learning, incorporating the latest research across: machine learning, compilers, differentiable programming, systems design, and beyond.

と宣言してるのかなり野心的なプロジェクト。

続きを読む

KerasとCartPoleでDQN (Deep Q-Network)

つりながら学ぶ!深層強化学習 PyTorchによる実践プログラミング 良い

 マイナビ出版からPyTorchを使って深層強化学習を作りながら学ぶという本が出てて、発売日にすぐ買って、今日もまだ読んでる途中なんだけれど、いかんせんディープラーニング関係はKerasと時々生TensorFlowぐらいしか弄ってないから、PyTorchが今ひとつ分からない。

 そこで勉強ついでに、ネットの記事を調べつつ、本のソースコードを元にDQNをKerasを使って実装するってのが今日のお話。

使うライブラリ

  • OpenAi Gym
  • TensorFlow 1.9.0
  • Keras (tf.keras)

まず前提として、DQNの実装で重要なのは以下の通り。

DQN で重要な4つのポイント

  • Experience Replay
  • Fixed Target Q-Network
  • Reward Clipping
  • Huber Loss

Huber Loss は TensorFlowの損失関数の中に実装されているのでそれを使うことにします。

続きを読む

作成した時刻を取得して、圧縮したファイルのフォルダ名にするBashコード

#!/bin/bash
format="%Y_%m_%d_%H_%M"
cmd=`date +${format}`
eval echo ${cmd}

tar -zcvf file_${cmd}.tar.gz TARGET_DIRECTORY/

   

 実行した時の時刻を yyyy/mm/dd/hh/mm で取得して、その結果を元に対象の圧縮ファイルを生成する。

    Twitterの生年月日いじったらロックされた。ツライ(涙)