使用 Keras 和 TensorFlow 查找最大化神经网络输出的输入

tol*_*ira 8 python machine-learning neural-network keras tensorflow

我已经使用Keras和TensorFlow的分类时尚MNIST下面这个教程

它使用AdamOptimizer来找到模型参数的值,以最小化网络的损失函数。网络的输入是形状为 [28, 28] 的二维张量,输出是形状为 [10] 的一维张量,它是 softmax 函数的结果。

一旦网络经过训练,我想将优化器用于另一项任务:找到最大化输出张量元素之一的输入。如何才能做到这一点?是否可以使用 Keras 或必须使用较低级别的 API 来做到这一点?

由于输入对于给定的输出不是唯一的,如果我们可以对输入可以采用的值施加一些限制,那就更好了。

训练好的模型具有以下格式

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=tf.nn.softmax)
])
Run Code Online (Sandbox Code Playgroud)

Sak*_*ngh 8

我觉得你会想要对输入进行反向传播,冻结模型的所有权重。你可以做的是:

  1. 在输入层之后添加一个与输入相同维度的密集层,并将其设置为可训练
  2. 冻结模型的所有其他层。(除了你添加的那个)
  3. 作为输入,输入单位矩阵并根据您想要的任何输出训练您的模型。

如果您想根据输入进行反向传播,这篇文章和这篇文章可能会对您有所帮助。这有点像你的目标,但你可以得到直觉。


Fra*_*aro 1

有趣的。也许一个解决方案是将所有数据提供给网络,并为每个样本保存output_layerafter softmax

这样,对于3 个类,您想要找到第 1 类的最佳输入,您正在寻找第一个分量较高的输出。例如:[1 0 0]

实际上,输出意味着样本作为类别之一的概率或网络的置信度。