機械学習の分野で広く使用されている数値計算ライブラリに TensorFlow があります。
今回はこのTensorFlowの基本的な文法等について調べました。
import・from
1 2 3 4 5 6 |
#TensorFlowのインポート import tensorflow as tf #MNISTデータセットの取得 from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("data_set/", one_hot=True) |
定数・変数定義
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#定数定義 a = tf.constant(10) #constant(定数の中身) #変数定義 x = tf.Variable(tf.zeros([64]), name="b1") #Variable(変数の中身,name="変数の名前") init = tf.initialize_all_variables() #変数の初期化、モデル作成の最後に実行 sess.run(init) #placeholder x = tf.placeholder(tf.float32, [None, 784]) #placeholder(データ精度,テンソルの次元) #placeholderによる値の受け渡し x_1 = tf.constant(3) #定数3を定義 x_2 = tf.placeholder(tf.int32) #placeholderを設定、現段階では値は不定 mul_test = tf.multiply(x_1,x_2) #計算モデルの定義 print(sess.run(mul_test,feed_dict={x_2: 5})) #計算の実行、feed_dictでx_2に値を与えている |
テンソル生成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#正規分布をもとにテンソルを生成 tf.truncated_normal([784, 64], stddev=0.1) #truncated_normal(テンソルの大きさ,stddev=標準偏差) #対角行列 tf.diag([1.0, 2.0, 3.0]) [[1. 0. 0.] [0. 2. 0.] [0. 0. 3.]] #中身がすべて同じ行列 tf.fill([3,3],1) [[1 1 1] [1 1 1] [1 1 1]] #ランダム値を元にテンソル生成 tf.random_uniform([3,3]) [[0.77462757 0.95717156 0.72804165] [0.08803916 0.40819335 0.9121412 ] [0.4736141 0.28708863 0.06371641]] #numpy行列からテンソルを生成 a = np.array([[1,2,3],[4,5,6]]) tf.convert_to_tensor(a)) [[1 2 3] [4 5 6]] |
テンソル計算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#行列の加算 x + y #テンソルを掛け合わせアフィン変換をおこなう tf.matmul(x, y) #転置行列 tf.transport(x) #行列式 tf.matrix_determinant(x) #逆行列 tf.matrix_inverse(x) |
スカラー計算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#スカラー計算にテンソルを渡すと、要素単位ごとに計算が行われる #加算 tf.add(x,y) #減算 tf.subtract(x,y) #積 tf.multiply(x,y) #商 tf.div(x,y) #商の床関数 tf.truediv(x,y) #商(浮動小数点) tf.floordiv(x,y) # tf.mod(x,y) #あまり |
Session
1 2 3 4 5 6 7 |
#1 with tf.Session() with sess: sess.run(init) #2 sess = tf.Session() sess.run(init) |
活性化関数
1 2 3 4 5 6 7 8 9 10 11 |
#シグモイド関数 tf.nn.sigmoid(y) #Relu関数 tf.nn.relu(y) #Relu6関数(最大値が6になっているRelu関数) tf.relu6(y) #双曲線正接関数 tf.nn.tanh(y) |
出力層
1 2 |
#ソフトマックス出力層 tf.nn.softmax(y) |
ディープラーニング
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#確率的勾配下降法 tf.train.GradientDescentOptimizer(学習率).minimize(損失関数) #畳み込み関数 tf.nn.conv2d(画像, フィルタ, strides=ストライド,padding=パディング) #画像 : [-1, 縦, 横, チャンネル数] #フィルタ : [縦, 横, チャンネル数, フィルタ枚数] #ストライド : [バッチ方向, 縦, 横, チャンネル方向] #パディング: "SAME" パディングを入れる、"VALID" パディングを入れない #プーリング関数 #maxプーリング tf.nn.max_pool(画像, ksize=フィルタ, strides=ストライド, padding=パディング) #各引数の内容は畳み込み関数と同じ |
関連記事