У меня есть простая нейронная сеть с прямой связью, представляющая некоторые входные и выходные данные.Я извлек весы и уклоны.
Теперь я хочу выполнить оптимизацию в сохраненной сети (как функция) и найти входы, которые будут давать желаемый результат.Моя целевая функция - разница между желаемым выходом и выходом из сети.Что бы я ни пытался, я получаю ошибку.Я изменил тип моей первоначальной догадки X0, но ничего не получалось.Мой код настроен как показано ниже -
with tf.Session() as sess:
# Extract data from Network
new_saver = tf.train.import_meta_graph('./Save_Network/my_model.meta')
new_saver.restore(sess, tf.train.latest_checkpoint('./Save_Network'))
weights_1 = tf.get_default_graph().get_tensor_by_name("weights_1:0")
biases_1 = tf.get_default_graph().get_tensor_by_name("biases_1:0")
weights_2 = tf.get_default_graph().get_tensor_by_name("weights_2:0")
biases_2 = tf.get_default_graph().get_tensor_by_name("biases_2:0")
weights_3 = tf.get_default_graph().get_tensor_by_name("weights_3:0")
biases_3 = tf.get_default_graph().get_tensor_by_name("biases_3:0")
def Objective1(c):
layer_1 = tf.nn.relu(tf.add(tf.matmul(c, weights_1), biases_1))
layer_2 = tf.nn.relu(tf.add(tf.matmul(layer_1, weights_2), biases_2))
out_layer = tf.add(tf.matmul(layer_2, weights_3), biases_3)
ObjFunc1 = tf.square(tf.subtract(OutputsNorm, out_layer))
return ObjFunc1
x0 = np.float32([-0.2, 0.02, -0.5])
x0 = np.reshape(x0, (1, 3))
res = minimize(Objective1, x0, method='nelder-mead', options={'xtol': 1e-8, 'disp': True})
Я получаю сообщение об ошибке
TypeError: Input 'b' of 'MatMul' Op has type float32_ref that does not match type float64 of argument 'a'.