478 x 717 x 3 = 1028178ピクセルで、ランクが1の画像があります。tf.shapeとtf.rankを呼び出して確認しました。tf.Tensor.set_shape()の説明
image.set_shape([478,717,3])を呼び出すと、次のエラーがスローされます。
"Shapes %s and %s must have the same rank" % (self, other))
ValueError: Shapes (?,) and (478, 717, 3) must have the same rank
最初に1028178にキャストして再度テストしましたが、エラーは依然として存在します。 1ランク1であり、他方が、なぜそれが総画素数はまだ一致して、エラーをスローする必要がある。しかし、ランク3であるので、意味を成さない
ValueError: Shapes (1028178,) and (478, 717, 3) must have the same rank
まあ、。
もちろん、tf.reshapeを使うこともできますが、うまく動作しますが、最適ではないと思います。 TensorFlowよくある質問
x.set_shape()とx = tf.reshape(x)の違いは何である上に述べたように
?
tf.Tensor.set_shape()メソッドは、Tensor オブジェクトの静的形状を更新し、これを直接推論することができない場合には追加の形状 情報を提供するために通常使用されます。 テンソルの動的形状を変更しません。
tf.reshape()演算は、異なる動的形状を持つ新しいテンソルを作成します。
新しいテンソルを作成するとメモリ割り当てが行われ、より多くのトレーニング例が含まれていると、コストが高くなる可能性があります。これは設計上のものか、ここに何か不足していますか?
実際の問題は、再構成されたTensorが元のテンソルとデータバッファを共有するかどうか、またはコピーを行うかどうかです。私はコードの速読からかなり分かりませんでしたが、コピーをすると固定されるべきものです –
mrryは下の彼の答えで浅いコピーであると精緻化しました。 – jkschin