我正在尝试将reshaped_one_hot
作为输入传递到bottleneck
,但出现以下错误:
ValueError: Input 0 of layer conv2d_2 is incompatible with the layer: expected ndim=4, found ndim=5. Full shape received: [1000, 16, 16, 512, 1]
我知道我需要重塑此输入,并确保它具有4个维度而不是5个维度,但是我在理解如何做到这一点时遇到了一些麻烦。我的input_shape
是[1000, 16, 16, 1]
我的尝试:
我尝试应用numpy.squeeze(one_hot)
,然后使其形状为one_hot
[1000, 16, 16, 512]
,但出现以下错误:TypeError: unhashable type: 'numpy.ndarray'
为什么我要对编码器的输出精确地应用一种热编码的直觉可能没有意义,因为我只是在测试一种理论,但我这样做的意图如下:
我想获取编码器的输出,执行一种热编码,在编码中使用独特的功能找到类别,类似于sklearn描述其一种热编码的方式,然后将其传递到瓶颈层。
我的代码:
encoder_img = tf.keras.layers.Input(shape=(16,16,1), name="input")
x = tf.keras.layers.Conv2D(1024, 1, activation='relu',kernel_initializer=keras.initializers.RandomUniform)(encoder_img)
x = tf.keras.layers.MaxPooling2D(1)(x)
inputtothelayer = tf.keras.layers.Conv2D(512, 1, activation='relu')(x)
pool = tf.keras.layers.MaxPooling2D(1, name="thelayer")(inputtothelayer)
encoder = tf.keras.Model(inputs=encoder_img, outputs=pool, name = 'encoder')
encoder.summary()
# one hot encoding layer
layer_name = 'thelayer'
intermediate_layer_model = tf.keras.Model(inputs=encoder_img,
outputs=encoder.get_layer(layer_name).output)
intermediate_output = intermediate_layer_model.predict(data)
print(intermediate_output)
one_hot = tf.keras.utils.to_categorical(intermediate_output,num_classes=None, dtype='float32')
print(one_hot)
reshaped_one_hot = one_hot
#reshaped_one_hot = np.squeeze(one_hot)
print(reshaped_one_hot.shape)
# decoder architecture
bottleneck = tf.keras.layers.Conv2D(256, 3, activation='relu')(reshaped_one_hot)