いくつかのTensorflowの小さい知識の点を記録します

8240 ワード

作者:xg 123321123-タイム雑貨店
出典:http://blog.csdn.net/xg123321123/article/details/77882232
著作権の所有、転載は作者に連絡してそして出典を明記して下さい
1 Tensorflowにおけるfeature mapの計算
Tensorflowではpaddingの方式は2種類ある:SAMEVALID
  • まず計算式
  • VALID使用時:
    output=ceil(float(input−kernel+1)/stride)
  • SAME使用時:
    output=ceil(float(input)/stride)

  • 次は説明です
  • VALIDでは実質的に充填されておらず、余分な要素は廃棄されます.例えば、次のinput_width=13、2回のスライドのみが許可され、余分な要素はすべて这里写图片描述
  • を失う.
  • SAMEにとって実質的に補完要素であり、例えば以下の場合、3回スライド可能であるが、3つの要素、左奇右偶、左に0、右に2つの0 这里写图片描述
  • を補う必要がある.
  • 以上はいずれもinput sizeが13,kernel sizeが6,strideが5の場合に
  • を行う.
  • 以上の情報が正しいかどうかは、自分で
  • を実験することができる.
    対比として、caffeの計算方法も与えます.
  • 定義入力:n∗c 0∗w 0∗h 0出力:n∗c 1∗w 1∗h 1ここでc 1は生成されたfeature map個数、すなわちnum_output;
  • で生成されたfeature mapサイズは、w_1 = (w_0 + 2*p-k)/s + 1 h_1 = (h_0 + 2*p-k)/s + 1
  • で、pはpaddingの寸法であり、kはボリュームコアの寸法である.上記式から,p=(k−1)/2であれば演算後,feature mapのサイズは変わらないことが分かる.

  • 2変数のshapeを取得する
  • tf.shape(x)#xはtensorまたは他のタイプであり、tensor
  • を返す
  • x.get_shape()#tensorだけがこの方法を持っていて、tuple
  • を返します.
    3配列をreshapeで並べ替える
  • 関数原型:tf.reshape(tensor, shape, name=None)
  • shapeパラメータの-1は配列要素の総数に基づいて残りの次元を自動的に計算することを表し、shapeパラメータは1つの-1
  • しかありません.
  • shapeパラメータが[-1]である場合、配列が
  • に完全に平らになることを示す.
    4 conv 2 dにおけるパラメータの意味
  • 関数原型:tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)
  • nameパラメータを除去して、この操作のnameを指定します.メソッドに関連する合計5つのパラメータです.
  • input:ボリュームを作る必要がある入力画像を指し、「batch,in_height,in_width,in_channels」というshapeを有するTensorであることが要求され、具体的な意味は「訓練時のbatchのピクチャ数、ピクチャ高さ、ピクチャ幅、画像チャネル数」であり、これは4次元のTensorであり、要求タイプはfloat 32とfloat 64のうちの1つ
  • であることに注意する.
  • filter:CNNのボリュームコアに相当し、「filter_height,filter_width,in_channels,out_channels」のようなshapeを有するTensorであることが要求される.具体的な意味は「ボリュームコアの高さ,ボリュームコアの幅,画像チャネル数,ボリュームコア個数」であり、要求タイプはパラメータinputと同じであり、filterのチャネル数はinputのin_channelsは一致しています.注意しなければならない点があります.3 D in_channelsは、パラメータinputの4次元
  • です.
  • strides:畳み込み時の画像の各次元のステップ長、これは1次元のベクトルで、長さ4、strides 1とstrides 2だけが実際の意味があり、filterのサイズを具体的に指定し、strides 0=strides 3=1は合格tensor
  • に包装するだけである.
  • padding:stringタイプの量は、「SAME」、「VALID」のいずれかであり、この値は異なるボリューム方式
  • を決定する.
  • use_cudnn_on_gpu:boolタイプ、cudnn加速を使用するかどうか、デフォルトはtrue
  • 結果はTensorを返します.つまり、私たちがよく言っているfeature map
  • です.
  • 栗は以下の通り:
  •     import tensorflow as tf  
        #case 2  
        input = tf.Variable(tf.random_normal([1,3,3,5]))  
        filter = tf.Variable(tf.random_normal([1,1,5,1]))  
        op = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='VALID')  
    
        with tf.Session() as sess:  
            sess.run(tf.initialize_all_variables())  
            res = (sess.run(op))  
            print (res.shape)  

    5指定されたGPUおよびGPUを使用して表示する
  • 端末がプログラムを実行するときに使用するGPUを設定コンピュータに複数のGPUがある場合、tensorflowはデフォルトですべて使用されます.GPUの一部のみを使用したい場合はCUDA_を設定できますVISIBLE_DEVICES.pythonプログラムを呼び出すときに使用できます:
    CUDA_VISIBLE_DEVICES=1 python my_script.py 
  • pythonコードで使用するGPUを設定pythonコードで使用するGPUを設定する場合(pycharmでデバッグする場合など)、次のコードを使用できます:
    import os
    os.environ["CUDA_VISIBLE_DEVICES"] = "2"
    
    #     with tf.device         ,        operation               , :
    
        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))
    
    #          ,     InvalidArgumentError     ;              
    
    init = tf.global_variables_initializer()
    config = tf.ConfigProto(device_count = {'GPU': 0})
    with tf.Session(config=config) as sess:
         sess.run(init)
    
    #         tensorFlow                   
    
    sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True, log_device_placement=True))
    
    
    #             
    
    sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
  • tensorflowで使用するメモリサイズを設定する
  • 定量設定メモリデフォルトtensorflowはGPUを用いてできるだけ多くのメモリである.使用するGPUメモリは、必要に応じて異なる値を設定して割り当てることができる.tensorflowに割り当てられたGPUメモリサイズは、GPU実メモリ*0.7である.
  • 必要に応じて、表示メモリの上に固定したサイズしか設定できません.必要に応じて割り当てるにはallow_を使用します.growthパラメータ
    gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.7)
    sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))        

  • 6 tensorの値を印刷する
    tensorflowを使用する場合、printのいずれかのtensorに直接接続すると、そのshape情報が得られる.
    tensorの値を印刷するにはclass tfを借りる必要がある.Sessionまたはclass tf.InteractiveSession.
    graphを確立する際にはtensorの構造形状情報のみが確立され,データの操作は実行されないからである.
  • はまずclass tfである.Sessionはtensorflow操作を実行するクラスを実行し、そのオブジェクトは操作を実行するオブジェクトとtensor数値を評価する環境をカプセル化し、すべてのデータ構造と操作を定義した後、最後に実行します.
  • gpu_options = tf.GPUOptions(allow_growth=True)
    sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))   
  • の次はclass tfである.InteractiveSessionはインタラクティブコンテキストのsessionに用いられ,tensorの数値を出力しやすい.前のセッションと比較して、Tensorなどのデフォルトのセッションが関連する操作を実行します.eval(), Operation.run(). Tensor.eval()はこのtensorを実行する前のすべての操作であり、Operation.run()も.
  • import tensorflow as tf  
    
    # Build a graph.  
    a = tf.constant(5.0)  
    b = tf.constant(6.0)  
    c = a * b  
    # Launch the graph in a session.  
    sess = tf.Session()  
    # Evaluate the tensor `c`.  
    print(sess.run(c))  

    このブログは、TensorFlowとcaffeにおける畳み込み層feature mapサイズ計算tensorflow conv 2 dのpadding解釈およびパラメータ解釈tensorflw指定されたGPUおよびGPUグラフィックス学習TensorFlowを用いてtensorFlowを印刷出力