2017-12-10 16 views
3

ガイダンスマップ(this研究論文に続いて)を使用して、双方向グリッドをアップサンプリングしようとしています。テンソルのバッチから個々のテンソルを抽出する方法は?

I 3つの入力を受け取り、アップサンプリングされた画像を提供するKeras層を作成した:形状の

  1. BilateralGrids(なし、16、16、96)
  2. 形状のGuidanceMaps(なし、256、 256)
  3. ここ形状のInputImages(なし、256、256、3)

は、 'なし' は、実行時に決定されるバッチサイズではありません。

私の動機は、次のようにピクセル単位の計算を実行することです:

def slicing(BilateralGrids, GuidanceMaps, InputImages): 
    output_images = [] 
    for i in range(batchSize): 
    grid = BilateralGrids[i] 
    guide = GuidanceMaps[i] 
    input_img = InputImages[i] 

    output = performPixelwiseComputation(grid, guide, input_img) 
    #output.shape => (256, 256, 3) 
    output_images.append(output) 

    return output_images #output_images.shape => (BatchSize, 256, 256, 3) 

問題は、それが不明であるため、私たちはバッチサイズをループを実行することはできませんです。

、私は次のことを試してみましたが、何も問題は解決しません:

  1. 当初、私はラムダ層は入力を一つずつを提供しますと思ったが、それは完全なバッチを提供します。
  2. その後、私はpythonでzip()を試しましたが、テンソルではうまくいきません。
(私の場合は不可能である)私は)(tf.stackを試してみましたが、それはテンソルのすべての形やランクがまったく同じである必要が
  • [が、私は正確にジップ()ようなものが必要]

    PS:これは私の最初のStackOverflow質問です。私はそれが理想的な方法で求められなければ謝罪します。あなたが必要なもの

  • +0

    'performPixelwiseComputation'を一度にテンソルフロー操作を使用してバッチ全体で使用できる方法はありませんか?それ以外の場合は、自分のカーネルを作成し、バッチ全体で必要な操作を設計する良い機会のように思えます。 – Sunreef

    +0

    @Sunreefいいえ、テンソルフローのデフォルト操作は私のためには機能しません。 pielwiseComputationは、各入力から各ピクセルにアクセスする必要があり、異なる次元のものであるため、自分で計算する必要があります。 私は自分のカーネルを書くことについて何も知らない、あるいは経験がありません。私はカーネルを作成したC++でいくつかのコードを見てきましたが、コードの流れを追跡する以外に、私はその作業を理解できませんでした。私はそれについてのより多くの情報を見つけることができるいくつかのリンクに私を転送してください。また、Kerasやtensorflowでカーネルを書くことができますか、それともC++で作業する必要がありますか? –

    +0

    機能に対してバッチサイズが不明であることを要求していますか?32などの固定バッチサイズを使用できますか? –

    答えて

    0

    tf.py_funcで、link

    は基本的に、あなたはあなたの必要性をカバーするためにカスタム関数を記述する必要があります。しかし、テンソルフローは象徴的なフレームワークです。これにより、通常のPythonを書くときにカスタム操作を宣言することができなくなります。あなたはpy_func 'hack'を使って、アクセスしたり、変更したり、やりたい操作をすることができます。ただし、ffネットワークに決定アル​​ゴリズムがある場合は、バックプロパゲーションレイヤと計算を定義する必要があります。また、このアプローチをデバッグするのは非常に面倒で難しいです。

    また、Chainerのように定義したフレームワークを試してみてください。そのため、入力時にネットワークを実行できます。

    +0

    私はそれを試み、更新するでしょう。 –

    関連する問題