我的主要输入特性是60x256x256的numpy数组,它将生成一个60x256x256的二进制掩码(也是numpy数组的形式)。二进制掩码起到了标签的作用,但我不知道如何从我的神经网络生成3D数值数组或张量输出。这是我当前的代码:
model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(32, kernel_size=(5, 5), strides=(1, 1),
activation='relu',
input_shape=(60, 256, 256)))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(tf.keras.layers.Conv2D(64, (5, 5), activation='relu'))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(1000, activation='relu'))
model.add(tf.keras.layers.Dense(256, activation='softmax'))
model.compile(
optimizer=tf.keras.optimizers.Adam(0.001),
loss=tf.keras.losses.CosineSimilarity(),
metrics=[tf.keras.metrics.CosineSimilarity()],
)
model.fit(
train,
epochs=6,
validation_data=ds_valid,
)简而言之,我希望最后一层的输出与输入层匹配,这样它就可以使用CosineSimilarity损失函数。除了这种基于CNN的方法之外,任何其他建议也将非常有帮助,因为似乎CNN主要用于分类。
发布于 2021-08-06 19:56:57
在最基本的级别上,您可以使用tf.keras.layers.Reshape。请参见https://www.tensorflow.org/tutorials/generative/autoencoder,以便您的最后两层可以是:
model.add(tf.keras.layers.Dense(60*256*256))
model.add(tf.keras.layers.Reshape(60, 256, 256))然而,我认为你正在寻找的是一个自动编码器类型的网络,并使用tf.keras.layers.Conv2DTranspose层。上面的链接是对自动编码器的介绍,我认为应该是一个很好的起点。
我不确定你的用例,但我认为你很可能想要使用基于卷积的方法,因为当你展平卷积时,你会迫使你的网络忘记所有关于问题对称性的信息(即它是2D空间中的一幅图片)。我不认为你的问题是一个回归问题的事实会影响到这一点。
https://stackoverflow.com/questions/68686409
复制相似问题