tf.expand_dims()とtf.reshape()の違い



Difference Between Tf



TensorFlow、次元を1次元増やしたい場合は、tf.expand_dims(input, dim, name=None)関数を使用できます。もちろん、tf.reshape(input、shape = [])を使用して同じ効果を得ることができますが、マップを作成する過程で、プレースホルダーがフィードによって具体的に評価されない場合があり、次のエラーがパッケージ化されます:

TypeError: Expected binary or unicode string, got 1


この場合、expand_dimsを使用して寸法を1ずつインクリメントすることを検討できます。たとえば、私自身のコードでは、特定の操作のために画像の寸法を2Dに縮小した後、4D [バッチ、高さ、幅、チャネル]に復元する必要があります。 ]、前後の一次元。 reshapeを使用すると、上記の理由でエラーが発生します。



one_img2 = tf.reshape(one_img, shape=[1, one_img.get_shape()[0].value, one_img.get_shape()[1].value, 1])

次の方法を使用して達成します。

one_img = tf.expand_dims(one_img, 0) One_img = tf.expand_dims(one_img, -1) #-1 indicates the last dimension

最後に、公式の例と説明を与えます



# 't' is a tensor of shape [2] shape(expand_dims(t, 0)) ==> [1, 2] shape(expand_dims(t, 1)) ==> [2, 1] shape(expand_dims(t, -1)) ==> [2, 1] # 't2' is a tensor of shape [2, 3, 5] shape(expand_dims(t2, 0)) ==> [1, 2, 3, 5] shape(expand_dims(t2, 2)) ==> [2, 3, 1, 5] shape(expand_dims(t2, 3)) ==> [2, 3, 5, 1]

Args:
入力:テンソル。
dim:テンソル。次のいずれかのタイプである必要があります:int32、int64。 0-D(スカラー)。入力の形状を拡張する次元インデックスを指定します。
name:操作の名前(オプション)。

戻り値:
テンソル。入力と同じタイプです。入力と同じデータが含まれていますが、その形状にはサイズ1の追加の次元が追加されています。

転載: https://blog.csdn.net/jasonzzj/article/details/60811035