目次
この記事はアピリッツの技術ブログ「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があったりするので、次はそっち使って遊んでみます。