【问题标题】:How to output a 3D tensor from a neural network?如何从神经网络输出 3D 张量?
【发布时间】:2021-08-06 18:58:44
【问题描述】:

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

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 似乎主要用于分类。

【问题讨论】:

    标签: python tensorflow keras deep-learning neural-network


    【解决方案1】:

    在最基本的级别上,您可以使用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 层。 上面的链接是对自动编码器的介绍,我认为应该是一个很好的起点。

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

    【讨论】:

      猜你喜欢
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      相关资源
      最近更新 更多