ホーム DoRuby Ruby×PyCallでTensorflowのMNISTチュートリアル
Ruby×PyCallでTensorflowのMNISTチュートリアル
 

Ruby×PyCallでTensorflowのMNISTチュートリアル

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

PyCallを登録RubyからPythonのノを呼べでにできので、TensorflowのOKのチュートリアルであるMNISTデータセットの画像分類を上みました。

はじめに

がさまお
久しいうです、くろすです。新入を名乗せのももてなりなりますが、、今は表3年は新発策でひたすら研究をしてください。


学生時代座でガリガリ微してMATLABのコードに実してDNN作したのがアホらしくててますます。。ししくちゃ今更感ありますが、RubyからPyCallをててて。

ルビーでデータサイエンス

あり前はかかでありでかかかでありがれいたのですがルビーはそれでありをする
ははははははははははははははははははははははははははははははははははははははははははははははははははははははははははははははははは
はを何とかする」
劣目は「Ruby望のデッキをする」

巨人の肩の上でるる」並べ方法でルビーから機械学習をやりたいと思います。

環境

$ルビー-v
ruby 2.5.0p0(2017-12-25リビジョン61468)[x86_64-darwin16]
$宝石リスト| grep pycall
pycall(1.0.3)

$ python3 -V
Python 3.6.4
$ pip3フリーズ| grep tensorflow
tensorflow == 1.6.0

ルビーのコード

今回やったチュートリアルはtensorflowのバージョンR1.2のチュートリアルのうちMNISTを使ったやつです。
https://www.tensorflow.org/versions/r1.2/get_started/mnist/beginners

tensorflowの失格1.6.0でもちゃんと勢なり。

必要「pycall 」
必要「pycall /インポートを」

モジュール Pythonは
  延びPyCall ::インポート
  クラス<<自己
    DEF から(パス、インポート:ゼロ)
      pyfrom path、import:import
       self .send import
     end

    def  method_missing(method_name)
      pyimport method_name
      self .send method_name
     end 
  end 
end
require_relative 'のpython '
#Pythonのライブラリのインポート
Pythonの.from(' tensorflow.examples.tutorials.mnist '、輸入::INPUT_DATA)
tf = Python .tensorflow
input_data = Python .input_data


#MMISTデータセットをダウンロードmnist = input_data.read_data_sets(' MNIST_data / '、one_hot:true)

#入力、重み、バイアス
x = tf.placeholder(tf.float32、[ nil、784 ])
W = tf.Variable.new(tf.zeros([ 784、10 ]))
b = tf.Variable.new(tf.zeros([ 10 ]))

#出力
y = tf.nn.softmax(tf.matmul(x、w)+ b)
y_ = tf.placeholder(tf.float32、[ nil、10 ])

#エラー関数
cross_entropy = tf.reduce_mean(-1 * tf.reduce_sum(y_ * tf.log(y)、reduction_indices:[ 1 ]))

#鉄道模型
train_step = tf.train.GradientDescentOptimizer.new(0.5).minimize(cross_entropy)

sess = tf.InteractiveSession.new
tf.global_variables_initializer.run

#電車は開始
1000年.times行う
  バッチ= mnist.train.next_batch(100)
  batch_xs、batch_ys = batch [ 0 ]、batch [ 1 ]
  sess.run(train_step、feed_dict:{x ​​=> batch_xs、y_ => batch_ys})
 end

#正規化
correct_prediction = tf.equal(tf.argmax(y、1)、tf.argmax(y_、1))

#結果
精度= tf.reduce_mean(tf.cast(correct_prediction、tf.float32))
puts sess.run(accuracy、feed_dict:{x ​​=> mnist.test.images、y_ => mnist.test.labels})

わざわざPythonザル呼切り改善のはmath.rbとかれてて目してた名残になる、たはtensorflow_tutorial.rbにベタ書きする問題なしです。

結果

$ ruby​​ tensorflow_tutorial.rb
0.9185

これは約92%になるはずです。

戦略に正回答率92%これになりました。

浄化所

pycallが富士に行くpythonが/ usr / bin / python

環境変数PYTHONを使いたいpythonにすどいい

$ export PYTHON = path / to / python3

データセットダウンロード連結SSL評価でエラー

$ / Applications / Python \ 3.6 / Install \ Certificates.command

で解決
参照(https://github.com/tensorflow/tensorflow/issues/10779

tf.matmul(x、w)でなんかエラーでた

例外:PyCall :: PyError:<class'TypeError '>:_ as_graph_element()に1つの必須の位置引数がありません:' self '
ファイル「/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/ops/math_ops.py」、2004行、matmul
  名前としてops.name_scope(name、 "MatMul"、[a、b])を使用:
ファイル "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/framework/ops.py"、行5616、__ enter__
  g = _get_graph_from_inputs(self._values)
ファイル "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/framework/ops.py"、5277行目、_get_graph_from_inputs
  graph_element = _as_graph_element(op_input)
_as_graph_elementのファイル「/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/framework/ops.py」、118行目
  conv_fn()を返します

まだの部分をルビーコードにません

pythonの元コード:tf.Variable(tf.zeros([10]))
間麻えたるちコード:tf.Varialbe(tf.zeros([10]))
改善ルビーコード:tf.Variable。(tf.zeros([10]))

よくPyCall使ってルビーで…ってる記事にはtf.Variable.(tf.zeros([10]))のように書いてるあのりますが、これはtf.Variableクラスの()メソッドを呼んでいる、つまりコンストラクタの呼び出しなのでルビー的に書くならイニシャライザを呼び出してあげれば良いん
消。じゃあおりHDLです。

正解のルビーコード:tf.Variable.new(tf.zeros([10]))

連想配列の説明手間戦略た

元のPythonコード:sess.run(train_step、feed_dict = {x:batch_xs、y_:batch_ys})
Rubyデッキコード:sess.run(train_step、feed_dict:{x:batch_xs、y_:batch_ys})
Ruby正解コード:sess.run(train_step、feed_dict:{x => batch_xs、y_ => batch_ys})

終わりに

PyCallをててRubyからtensorflowを押してMNISTのチュートリートたたて記事がぱっと見たたたたので書たたたたので書たみました。
今回はわざわざPyCallを使ってルビーからtensorflowを触りましたが、実はtensorflow.rbというRubyAPIがあったりするので、次はそっち使って遊んでみます。

記事を共有

最近人気な記事