ホーム » TensorFlow スニペット

TensorFlow スニペット」カテゴリーアーカイブ

TensorFlow: snippet: MNIST Softmax

import tensorflow as tf

mnist = input_data.read_data_sets("/var/tmp/mnist-softmax/", one_hot=True)

sess = tf.InteractiveSession()

x = tf.placeholder("float", [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)

y_ = tf.placeholder("float", [None, 10])
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

tf.initialize_all_variables().run()
for i in range(1000):
  batch_xs, batch_ys = mnist.train.next_batch(100)
  train_step.run(feed_dict={x: batch_xs, y_: batch_ys})

correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
print(accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

【参考】
TensorFlow : Tutorials : ML 初心者向けの MNIST

TensorFlow: snippet: CSV ファイル

filename_queue = tf.train.string_input_producer(["file0.csv", "file1.csv"])

reader = tf.TextLineReader()
key, value = reader.read(filename_queue)

record_defaults = [[1], [1], [1], [1], [1]]
col1, col2, col3, col4, col5 = tf.decode_csv(
    value, record_defaults=record_defaults)
features = tf.pack([col1, col2, col3, col4])

with tf.Session() as sess:
  coord = tf.train.Coordinator()
  threads = tf.train.start_queue_runners(coord=coord)

  for i in range(1200):
    example, label = sess.run([features, col5])

  coord.request_stop()
  coord.join(threads)

【参考】
TensorFlow : How To : データを読む

TensorFlow: snippet: GPU

a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print sess.run(c)
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: Tesla K40c, pci bus
id: 0000:05:00.0
b: /job:localhost/replica:0/task:0/gpu:0
a: /job:localhost/replica:0/task:0/gpu:0
MatMul: /job:localhost/replica:0/task:0/gpu:0
[[ 22.  28.]
 [ 49.  64.]]
with tf.device('/cpu:0'):
  a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
  b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print sess.run(c)
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: Tesla K40c, pci bus
id: 0000:05:00.0
b: /job:localhost/replica:0/task:0/cpu:0
a: /job:localhost/replica:0/task:0/cpu:0
MatMul: /job:localhost/replica:0/task:0/gpu:0
[[ 22.  28.]
 [ 49.  64.]]
with tf.device('/gpu:2'):
  a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
  b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
  c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print sess.run(c)
with tf.device('/gpu:2'):
  a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
  b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
  c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(
      allow_soft_placement=True, log_device_placement=True))
print sess.run(c)
c = []
for d in ['/gpu:2', '/gpu:3']:
  with tf.device(d):
    a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3])
    b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2])
    c.append(tf.matmul(a, b))
with tf.device('/cpu:0'):
  sum = tf.add_n(c)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print sess.run(sum)
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: Tesla K20m, pci bus
id: 0000:02:00.0
/job:localhost/replica:0/task:0/gpu:1 -> device: 1, name: Tesla K20m, pci bus
id: 0000:03:00.0
/job:localhost/replica:0/task:0/gpu:2 -> device: 2, name: Tesla K20m, pci bus
id: 0000:83:00.0
/job:localhost/replica:0/task:0/gpu:3 -> device: 3, name: Tesla K20m, pci bus
id: 0000:84:00.0
Const_3: /job:localhost/replica:0/task:0/gpu:3
Const_2: /job:localhost/replica:0/task:0/gpu:3
MatMul_1: /job:localhost/replica:0/task:0/gpu:3
Const_1: /job:localhost/replica:0/task:0/gpu:2
Const: /job:localhost/replica:0/task:0/gpu:2
MatMul: /job:localhost/replica:0/task:0/gpu:2
AddN: /job:localhost/replica:0/task:0/cpu:0
[[  44.   56.]
 [  98.  128.]]
 

【参考】
(翻訳/解説)TensorFlow : How To : GPU を利用する

TensorFlow: snippet: TensorBoard

x = tf.placeholder(tf.float32, [None, 784], name="x-input")
W = tf.Variable(tf.zeros([784,10]), name="weights")
b = tf.Variable(tf.zeros([10], name="bias"))
 
with tf.name_scope("Wx_b") as scope:
  y = tf.nn.softmax(tf.matmul(x,W) + b)
 
w_hist = tf.histogram_summary("weights", W)
b_hist = tf.histogram_summary("biases", b)
y_hist = tf.histogram_summary("y", y)
 
y_ = tf.placeholder(tf.float32, [None,10], name="y-input")

with tf.name_scope("xent") as scope:
  cross_entropy = -tf.reduce_sum(y_*tf.log(y))
  ce_summ = tf.scalar_summary("cross entropy", cross_entropy)
with tf.name_scope("train") as scope:
  train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
 
with tf.name_scope("test") as scope:
  correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
  accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
  accuracy_summary = tf.scalar_summary("accuracy", accuracy)
 
merged = tf.merge_all_summaries()
writer = tf.train.SummaryWriter("/tmp/mnist_logs", sess.graph_def)
tf.initialize_all_variables().run()
 
for i in range(1000):
  if i % 10 == 0:
    feed = {x: mnist.test.images, y_: mnist.test.labels}
    result = sess.run([merged, accuracy], feed_dict=feed)
    summary_str = result[0]
    acc = result[1]
    writer.add_summary(summary_str, i)
    print("Accuracy at step %s: %s" % (i, acc))
  else:
    batch_xs, batch_ys = mnist.train.next_batch(100)
    feed = {x: batch_xs, y_: batch_ys}
    sess.run(train_step, feed_dict=feed)
 
print(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels}))

8 行目: データ収集のための summary operations を追加します。

25 行目: 全ての要約をマージしてそれらを /tmp/mnist_logs に書き出します。

30 行目: 要約データと正解率を記録します。

【参考】
(翻訳/解説)TensorFlow : How To : 学習を視覚化する

 

以上

TensorFlow : snippet : 変数の作成・初期化・保存・復旧

変数の作成にはテンソルの shape を指定します。

weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),
                      name="weights")
biases = tf.Variable(tf.zeros([200]), name="biases")
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),
                      name="weights")
biases = tf.Variable(tf.zeros([200]), name="biases")
...
init_op = tf.initialize_all_variables()
 
with tf.Session() as sess:
  sess.run(init_op)
  ...

5 行目: 変数を初期化するための OP を追加します。
8 行目: init 操作を実行します。

 

新しい変数を他の変数の値から初期化するためには他の変数の initialized_value() プロパティを使用します。

weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),
                      name="weights")
w2 = tf.Variable(weights.initialized_value(), name="w2")
w_twice = tf.Variable(weights.initialized_value() * 2.0, name="w_twice")

4 行目: 他の変数を ‘weights’ の2倍の値で作成します。

v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")
...
init_op = tf.initialize_all_variables()
 
saver = tf.train.Saver()
 
with tf.Session() as sess:
  sess.run(init_op)
  ..
  save_path = saver.save(sess, "/tmp/model.ckpt")
  print("Model saved in file: %s" % save_path)

6 行目: 全ての変数を保存して復旧するための OP を追加します。
11 行目: 変数をディスクに保存します。

 

同じ Saver オブジェクトが変数の復旧のために使用されます。
ファイルから変数を復旧する時は前もってそれらを初期化する必要はありません。

v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")
...
saver = tf.train.Saver()
 
with tf.Session() as sess:
  saver.restore(sess, "/tmp/model.ckpt")
  print("Model restored.")

7 行目: ディスクから変数を復旧します。

v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")
...
saver = tf.train.Saver({"my_v2": v2})

4 行目: “my_v2” という名前を使って ‘v2’ だけを保存し復旧する OPs を追加します。

 

【参考】
(翻訳/解説)TensorFlow : GET STARTED : 基本的な使い方

TensorFlow: snippet: テンソル

変数はグラフの実行を通じて状態を保持します。次の例題は単純なカウンターとして作用する変数の例です。

import tensorflow as tf

state = tf.Variable(0, name="counter")

one = tf.constant(1)
new_value = tf.add(state, one)
update = tf.assign(state, new_value)

init_op = tf.initialize_all_variables()

with tf.Session() as sess:
  sess.run(init_op)
  print(sess.run(state))
  for _ in range(3):
    sess.run(update)
    print(sess.run(state))

# 出力:
#
# 0
# 1
# 2
# 3
import tensorflow as tf

input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)

intermed = tf.add(input2, input3)
mul = tf.mul(input1, intermed)

with tf.Session() as sess:
    result = sess.run([mul, intermed])
    print(result)

# 出力:
#
# [21.0, 7.0]

TensorFlow はまた、グラフにおける任意の操作にテンソルを直接あてがうために feed(供給)機構を提供しています。

feed(供給)は操作 (OP) の出力を一時的にテンソル値で置き換えます。feed data(供給データ)は run() 呼び出しの引数として供給します。feed は run 呼び出しに対してのみ渡されて使用されます。最も一般的なユースケースでは特定の操作を “feed” 操作に指定することを伴います。tf.placeholder() を使用してそれらを作成します :

import tensorflow as tf

input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)

output = tf.mul(input1, input2)

with tf.Session() as sess:
    print (sess.run(output, feed_dict={input1:[7.], input2:[2.]}))
    print (sess.run([output], feed_dict={input1:[7.], input2:[2.]}))

# 出力:
#
# [ 14.]
# [array([ 14.], dtype=float32)]
 

【参考】
(翻訳/解説)TensorFlow : GET STARTED : 基本的な使い方

TensorFlow: snippet: Hello World

In [1]: import tensorflow as tf

In [2]: hello = tf.constant('Hello, TensorFlow!')

In [3]: sess = tf.Session()
I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 4
I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 4

In [4]: print(sess.run(hello))
Hello, TensorFlow!
In [1]: import tensorflow as tf

In [2]: a = tf.constant(10)

In [3]: b = tf.constant(32)

In [4]: sess = tf.Session()
I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 4
I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 4

In [5]: print(sess.run(a+b))
42

TensorFlow: snippet: Keras

$ python -c "from keras import backend; print backend._BACKEND"
Using TensorFlow backend.
tensorflow

【参考】
Keras backends

TensorFlow: snippet: 対話的な利用方法

対話的な Python 環境での使い勝手のために、対話的に利用する際には、InteractiveSession クラス、そして Tensor.eval() と Operation.run() メソッドを代わりに使うことにより、変数がセッションを保持し続けなければならないことを回避します。

In [1]: import tensorflow as tf

In [2]: sess = tf.InteractiveSession()

In [3]: x = tf.Variable([1.0, 2.0])

In [4]: a = tf.constant([3.0, 3.0])

In [5]: x.initializer.run()

In [6]: sub = tf.sub(x, a)

In [7]: print(sub.eval())
[-2. -1.]

In [8]: sess.close()
 

【参考】
(翻訳/解説)TensorFlow : GET STARTED : 基本的な使い方

TensorFlow: snippet: 基本的な使い方

import tensorflow as tf

matrix1 = tf.constant([[3., 3.]])
matrix2 = tf.constant([[2.],[2.]])

product = tf.matmul(matrix1, matrix2)

sess = tf.Session()

result = sess.run(product)
print(result)

sess.close()

3 行目: 1×2 行列を生成する constant(定数) OP を作成します。OP はノードとしてデフォルトグラフに追加されます。

4 行目: 2×1 行列を生成するもう一つの constant を作成します。

6 行目: ‘matrix1’ と ‘matrix2’ を入力として取る Matmul OP を作成します。戻り値 ‘product’ は行列の乗算の結果を表します。

8 行目: デフォルト・グラフを launch します。

10 行目: matmal OP を動作させるために、matmal OP の出力を表す ‘product’ を渡して sessioin ‘run()’ メソッドを呼び出します。
これは呼び出しに対して matmul OP の出力を返してもらうことを望むことを指示しています。OP に必要な全ての入力はセッションにより自動的に動作します。これらは典型的には並行して動作します。
OP の出力は ‘result’ に numpy `ndarray` オブジェクトとして返されます。=> [[ 12.]]

13 行目: 終了したらセッションを閉じます。

 

“with” ブロックでセッションに入ることもできます。セッションは with ブロックの最後に自動的に閉じます。

import tensorflow as tf

matrix1 = tf.constant([[3., 3.]])
matrix2 = tf.constant([[2.],[2.]])

product = tf.matmul(matrix1, matrix2)

with tf.Session() as sess:
    result = sess.run([product])
    print(result)
 

TensorFlow の実装はグラフ定義を例えば CPU や GPU カードの一つのような、利用可能な計算資源に渡り分散された実行可能な処理に翻訳します。一般には CPU あるいは GPU を明示的に指定しなくてもかまいません。もし一つを有する場合、TensorFlow は最初の GPU をできる限り多くの処理で使用します。

もし貴方のマシン上で利用可能な1つ以上の GPU を持つ場合、最初のものを超えて GPU を利用するためには、それに OPs を明示的に割り当てなければなりません。どの CPU あるいは GPU を処理のために使用するかを指定するためには with…Device ステートメントを使用します :

import tensorflow as tf

with tf.Session() as sess:
  with tf.device("/gpu:1"):
    matrix1 = tf.constant([[3., 3.]])
    matrix2 = tf.constant([[2.],[2.]])
    product = tf.matmul(matrix1, matrix2)
    result = sess.run([product])
    print(result)

デバイスは文字列で指定されます。現在サポートされるデバイスは :

    "/cpu:0": 貴方のマシンの CPU。
    "/gpu:0": 貴方のマシンの GPU、もし一つを持つのであれば。
    "/gpu:1": 貴方のマシンの2つ目の GPU, etc.

GPU と TensorFlow についての詳細は Using GPUs を参照してください。

 

【参考】
(翻訳/解説)TensorFlow : GET STARTED : 基本的な使い方

AI導入支援 #2 ウェビナー

スモールスタートを可能としたAI導入支援   Vol.2
[無料 WEB セミナー] [詳細]
「画像認識 AI PoC スターターパック」の紹介
既に AI 技術を実ビジネスで活用し、成果を上げている日本企業も多く存在しており、競争優位なビジネスを展開しております。
しかしながら AI を導入したくとも PoC (概念実証) だけでも高額な費用がかかり取組めていない企業も少なくないようです。A I導入時には欠かせない PoC を手軽にしかも短期間で認知度を確認可能とするサービの紹介と共に、AI 技術の特性と具体的な導入プロセスに加え運用時のポイントについても解説いたします。
日時:2021年10月13日(水)
会場:WEBセミナー
共催:クラスキャット、日本FLOW(株)
後援:働き方改革推進コンソーシアム
参加費: 無料 (事前登録制)
人工知能開発支援
◆ クラスキャットは 人工知能研究開発支援 サービスを提供しています :
  • テクニカルコンサルティングサービス
  • 実証実験 (プロトタイプ構築)
  • アプリケーションへの実装
  • 人工知能研修サービス
◆ お問合せ先 ◆
(株)クラスキャット
セールス・インフォメーション
E-Mail:sales-info@classcat.com