Tensorflow Keras置换层与重塑层

Tensorflow Keras置换层与重塑层,tensorflow,keras,keras-layer,Tensorflow,Keras,Keras Layer,下面的模型1和模型2都有输出形状(无、64、10)。模型1和模型2的行为完全相同吗?如果没有,他们的行为有何不同?如果是的话,当重塑层可以做置换层所做的每一件事时,为什么我们需要置换层呢 model1 = Sequential() model1.add(Permute((2, 1), input_shape=(10, 64))) model2 = Sequential() model2.add(Reshape((64, 10), input_shape=(10, 64))) 模型2.add(

下面的模型1和模型2都有输出形状(无、64、10)。模型1和模型2的行为完全相同吗?如果没有,他们的行为有何不同?如果是的话,当重塑层可以做置换层所做的每一件事时,为什么我们需要置换层呢

model1 = Sequential()
model1.add(Permute((2, 1), input_shape=(10, 64)))

model2 = Sequential()
model2.add(Reshape((64, 10), input_shape=(10, 64)))

模型2.add(重塑((64,10),输入_shape=(10,64))

您可以自己测试它

model1 = Sequential()
model1.add(Permute((2, 1), input_shape=(10, 64)))

model2 = Sequential()
model2.add(Reshape((64, 10), input_shape=(10, 64)))

X = np.random.uniform(0,1, (3,10,64))
tf.reduce_all(model1(X) == model2(X)) # ===> False
置换不同于重塑。“置换”只是在轴上更改元素,而“重塑”则类似于在展平元素后对其重新排序

model3 = Sequential()
model3.add(Flatten(input_shape=(10, 64)))
model3.add(Reshape((64, 10)))

tf.reduce_all(model2(X) == model3(X)) # ===> True