@この記事は公開番号から来ています:csdn2299、公開番号プログラマの
学術機関のテンソルフローに従って、画像の複数のブロックの行と列をつなぎ合わせます
深層学習プロセスでは、畳み込みによって得られる画像ブロックサイズは8×8×1024の画像ブロックであり、得られた画像ブロックは[8×8]×[32×32]を取得するように再形成されます。ここで、[8×8]画像ブロックの数です。[32×32]は小さな画像のサイズです。tf.concatを使用して小さな画像をつなぎ合わせます。
・画像の畳み込みの過程で、こんな面倒な縫い方をしました。ブロック縫いなので、これ以上の縫い方は考えていませんでした。最初はリシェイプを使っていましたが、得られた結果が正しくないので、確認が必要ですデータの次元は、データの次元にとって非常に問題があります。
import tensorflow as tf
def tensor_concat(f, axis):
x1 = f[0, :, :]
for i in range(1, 8):
x1 = tf.concat([x1, f[i, :, :]], axis=axis)
return x1
def block_to_image(f):
x1 = tf.reshape(f, [64, 1024])
x1 = tf.reshape(x1, [64, 32, 32])
m2 = tensor_concat(x1[0:8, :, :], axis=1)
for i in range(1, 8):
m1 = tensor_concat(x1[i*8:(i+1)*8, :, :], axis=1)
m2 = tf.concat([m2, m1], axis=0)
x2 = tf.reshape(m2, [256, 256, 1])
return x2
x = tf.random_normal([ 8, 8, 1024])
with tf.Session() as sess:
m = sess.run(x)
m1 = sess.run(block_to_image(m))
最後に、行スティッチングと列スティッチングによって256×256×1のサイズの画像が得られます。
[batch_size、height、weight、channel]の画像に同じ画像ブロックステッチを実行します。
ディープニューラルネットワークでは、ブロックスプライシング用の画像サイズが[256×256×1]のbatch_size画像があります。追加の次元の画像の場合、スプライシングは[batch_size、8、8、1024]によって[batch_size 、256、256、1]。パートを実行するとき、batch_sizeパートは実際にそれを処理する方法を認識していないため、このメソッドは引き続き使用され、使用される関数はappendおよびtf.stack()です
def tensor_concat(f, axis):
x1 = f[0, :, :]
for i in range(1, 8):
x1 = tf.concat([x1, f[i, :, :]], axis=axis)
return x1
def block_to_image(f):
x3 =[]
for k in range(f.shape[0]):
x = f[k, :, :, :]
x1 = tf.reshape(x, [64, 1024])
x1 = tf.reshape(x1, [64, 32, 32])
m2 = tensor_concat(x1[0:8, :, :], axis=1)
for i in range(1, 8):
m1 = tensor_concat(x1[i*8:(i+1)*8, :, :], axis=1)
m2 = tf.concat([m2, m1], axis=0)
x2 = tf.reshape(m2, [256, 256, 1])
x3.append(x2)
x4 = tf.stack(x3)
return x4
x = tf.random_normal([10, 8, 8, 1024])
with tf.Session() as sess:
m = sess.run(x)
m1 = sess.run(block_to_image1(m))
def tensor_concat(f, axis):
x1 = f[0, :, :]
for i in range(1, 8):
x1 = tf.concat([x1, f[i, :, :]], axis=axis)
return x1
def block_to_image(f):
x3 =[]
for k in range(f.shape[0]):
x = f[k, :, :, :]
x1 = tf.reshape(x, [64, 1024])
x1 = tf.reshape(x1, [64, 32, 32])
m2 = tensor_concat(x1[0:8, :, :], axis=1)
for i in range(1, 8):
m1 = tensor_concat(x1[i*8:(i+1)*8, :, :], axis=1)
m2 = tf.concat([m2, m1], axis=0)
x2 = tf.reshape(m2, [256, 256, 1])
x3.append(x2)
x4 = tf.stack(x3)
return x4
x = tf.random_normal([10, 8, 8, 1024])
with tf.Session() as sess:
m = sess.run(x)
m1 = sess.run(block_to_image1(m))
学習プロセス中、テンソルを直接割り当てることはできません。たとえば、次のように書くことはできません。
x2 = tf.reshape(m2, [256, 256, 1])
x3[k, :, :, 1] = x2
このようなコードでは、エラーが発生します。「Tensor」オブジェクトはアイテムの割り当てをサポートしていません
同様のインデックスを持つ割り当ての場合、参照方法は次のとおりです。
x3 = []
x3.append(x2)
このとき、リストのフォーマットが取得されるので、次のステップは、tf.stack(x3)を使用してリストを配列に変換することです。
読んでいただきありがとうございます
。大学でpythonを学ぶことを選んだとき、コンピュータの基礎がおかしいことに気付きました。学業資格はあり
ませんでした。これは何もする必要はありません。それを補うことしかできません。道は、Pythonのコア知識を学び続け、コンピューターの基礎の詳細な研究を整理し、平凡になりたくない場合は、コーディングに参加して成長を続けてください!
実は、ここには技術だけでなく、それ以外のものもあり、例えば「絹糸」というよりも、どうやってプログラマーとして絶妙な存在になるのか、プログラマー自体が高貴な存在ですね。[参加するにはクリックしてください]自分らしくなりたい、高貴な人になりたい、是非!