我在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])
我想知道一旦我的神经网络已经训练过,是否有办法解决这个约束优化问题。有一个可以针对一般功能执行的科学优化。有没有办法为神经网络做到这一点。请提供一个代码示例。
答案 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
,它最大程度地提高了分类器将其放入一个特定类的确定性。