search
LoginSignup
1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

Carview Advent Calendar 2020 Day 20

posted at

pythonによるスクレイピング&機械学習をtensorflow2で動かしてみた

前提条件

対象

この記事は、Webエンジニア向けです。
私自身Webプログラマでして、機械学習を仕事に活かせないかと考えるために勉強しつつ書いたものになります。
それと、「pythonによるスクレイピング&機械学習」に沿って書くので、本の補足のつもりでみてください。

環境

・PC : Macbook pro
・OS : Catalina(10.15.7)
・言語 : python2.7.16
・エディタ : jupyter(せっかくなので使いましょう、便利です)
pythonやライブラリのインストールは、つまづいた記憶もないのでここでは省きます。

お願い

あなたに感想や要望を書いて頂けると主が喜びます。ぜひ気軽にコメントしていってください。
もっとシンプルな方法があれば教えてください。

レッツ機械学習

tensorflow2(以下、tf2)の便利技

基本的にtf2は、無印の動作もできます

sess = tf.compat.v1.Session()
sess.run(tf.global_variables_initializer())

本をよみながら、うまくtf2の書き方にできない時は、これで誤魔化しましょう

5-4をtf2でやってみる

src/ch5/placeholder1.pyをtf2化
著作権上元コードは乗せてません

import tensorflow as tf

#メソッドで制御
#noneを指定してあげると、配列が可変となる
@tf.function(input_signature=[tf.TensorSpec([None], tf.int32)])
def hoge(a):
    b = tf.constant(2)
    return a * b

#.numpy()で数字の部分だけとれる
print( hoge(tf.constant([1,2,3])).numpy() )
print( hoge(tf.constant([10,20,30])) )

結果

[2 4 6]
tf.Tensor([20 40 60], shape=(3,), dtype=int32)

簡単な解説
このメソッド自体は
元のコードでは、メソッドではなくsession.runで動作してます。
tf2ではsessionは使わなくてよくなったので、シンプルに作れます。

まず、元のコードではrun時に値を代入していますが、私はメソッドに引数を渡して、動作させてます。
@tf.function(input_signature=[tf.TensorSpec([None], tf.int32)])
この定義により引数の型を決めています。もちろん複数定義もできます。

その後は、元コードと同じように配列の掛け算を行って表示してます。

まとめ

短いですが、tf2のさわりはこんな感じです。
1.sessionは必要ない
2.メソッドを作りやすくなった
それ以外にももちろん機械学習において便利になった点もあるので、
この本を元に今後アップしていけたらと思います。

ありがとうございました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1
Help us understand the problem. What are the problem?