首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从神经网络输出3D张量?

如何从神经网络输出3D张量?
EN

Stack Overflow用户
提问于 2021-08-06 18:58:45
回答 1查看 76关注 0票数 1

我的主要输入特性是60x256x256的numpy数组,它将生成一个60x256x256的二进制掩码(也是numpy数组的形式)。二进制掩码起到了标签的作用,但我不知道如何从我的神经网络生成3D数值数组或张量输出。这是我当前的代码:

代码语言:javascript
复制
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主要用于分类。

EN

回答 1

Stack Overflow用户

发布于 2021-08-06 19:56:57

在最基本的级别上,您可以使用tf.keras.layers.Reshape。请参见https://www.tensorflow.org/tutorials/generative/autoencoder,以便您的最后两层可以是:

代码语言:javascript
复制
model.add(tf.keras.layers.Dense(60*256*256))
model.add(tf.keras.layers.Reshape(60, 256, 256))

然而,我认为你正在寻找的是一个自动编码器类型的网络,并使用tf.keras.layers.Conv2DTranspose层。上面的链接是对自动编码器的介绍,我认为应该是一个很好的起点。

我不确定你的用例,但我认为你很可能想要使用基于卷积的方法,因为当你展平卷积时,你会迫使你的网络忘记所有关于问题对称性的信息(即它是2D空间中的一幅图片)。我不认为你的问题是一个回归问题的事实会影响到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68686409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档