私は本当にゆっくりとしているものに頭を引っ張り、最適化を望んでいます。TensorFlowでチャネルごとに完全に接続されたレイヤーを適用する方法
私はエンコーダとデコーダの間に大きな潜在的なスペースを持つTensorFlowに畳み込み自動エンコーダを実装しようとしています。現在では、通常、完全に接続されたレイヤーでエンコーダをデコーダに接続しますが、これは潜在的な空間が高い次元性を持つため、計算上実現可能な機能が多すぎるためです。
this paperでこの問題の素晴らしい解決策を見つけました。彼らはそれを「チャネルワイズ完全接続層」と呼んでいる。基本的には、チャンネルごとに完全に接続されたレイヤーです。
私はこれを実装しようとしていますが、実際には動作するようになっていますが、グラフの生成には長い時間がかかります。これまでのコードです:
def _network(self, dataset, isTraining):
encoded = self._encoder(dataset, isTraining)
with tf.variable_scope("fully_connected_channel_wise"):
shape = encoded.get_shape().as_list()
print(shape)
channel_wise = tf.TensorArray(dtype=tf.float32, size=(shape[-1]))
for i in range(shape[-1]): # last index in shape should be the output channels of the last conv
channel_wise = channel_wise.write(i, self._linearLayer(encoded[:,:,i], shape[1], shape[1]*4,
name='Channel-wise' + str(i), isTraining=isTraining))
channel_wise = channel_wise.concat()
reshape = tf.reshape(channel_wise, [shape[0], shape[1]*4, shape[-1]])
reconstructed = self._decoder(reshape, isTraining)
return reconstructed
これはなぜそういうのですか?実際には範囲(2048)ですが、すべての線形レイヤーは実際には小さくなります(4x16)。私はこれに間違った方法で近づいていますか?
ありがとうございます!
このリンクは質問に答えるかもしれませんが、回答の重要な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューより](/レビュー/低品質の投稿/ 18677744) – aerokite
@aerokiteありがとう、私はすでに私の答えを変更しました。 – Haibo
うわー!ありがとう!私は彼らがオンラインで実装されているとは信じられませんし、テキストでも言及しません!また、これは私がやっていたこととはまったく離れています。私と同じ問題があるのだろうかと思います。 –