约束优化Tensorflow

时间:2019-09-16 07:18:37

标签: tensorflow optimization keras neural-network

我在Keras中拥有训练有素的分类器神经网络。令神经网络为f(x)。我想找到向量x使得|| x || ^ 2 = 1时,f(x)最大化。我目前已经用Keras训练了我的神经网络

model = Sequential()
model.add(Dense(500, activation='sigmoid'))
model.add(Dense(500, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam',  metrics=['accuracy', auc])
model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=2, verbose = 1, callbacks=[earlyStopping])

我想知道一旦我的神经网络已经训练过,是否有办法解决这个约束优化问题。有一个可以针对一般功能执行的科学优化。有没有办法为神经网络做到这一点。请提供一个代码示例。

1 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,那么您已经完成了对神经网络的训练,并希望找到输入x,该输入将使其在某个类别(输出接近1.0)中的概率最大化。

您可以编写一个小函数来使用predict_proba()方法评估网络性能,以获取测试数据的分类概率,然后使用scipy优化此函数:

model = Sequential()
model.add(Dense(500, activation='sigmoid'))
model.add(Dense(500, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam',  metrics=['accuracy', auc])
model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=2, verbose = 1, callbacks=[earlyStopping])

def f(x):
    prediction = model.predict_proba(x)
    return -prediction

a = scipy.optimize.minimize(f, x0=np.random.randn(500))
optimal_x = a.x

optimal_x将是输入x,它最大程度地提高了分类器将其放入一个特定类的确定性。