Мне нужен способ иметь доступ к матрице весов в TensorFlow или Keras в каждой итерации, чтобы я мог преобразовать ее в формат, который я могу использовать в Numpy для выполнения определенных операций над ней, а затем отправить его обратно вTensorFlow.
Например, я хочу изменить свой фильтр так, чтобы некоторые нейроны определялись другим нейроном фильтра.Они должны быть получены в виде решений линейных систем с другими нейронами в качестве коэффициентов, а не в процессе обучения.Поскольку я не мог найти способ сделать это в TensorFlow или Keras, мне пришлось использовать Numpy.
Я нашел много вопросов с одинаковыми или похожими заголовками, но ни один из них не помог.Буду признателен за любые подсказки.
РЕДАКТИРОВАТЬ позвольте мне объяснить проблему более четко, рассмотрите следующий код
import tensorflow as tf
import numpy as np
x = tf.placeholder(tf.float32, (1, 5, 5, 1))
y = tf.placeholder(tf.float32, (1))
# create variable
weights = {
"my_filter": tf.Variable(tf.truncated_normal([3, 3, 1, 1]), name="my_filter"),
"f_c": tf.Variable(tf.truncated_normal([25,1]), name="f_c") }
conv = tf.nn.conv2d(x, weights["my_filter"], [1,1,1,1], padding='SAME')
flatten= tf.reshape(conv,[1,25])
logits= tf.matmul(flatten,weights["f_c"])
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits,labels= y))
optmize = tf.train.AdamOptimizer()
grads_and_vars = optmize.compute_gradients(cost)
#In this part before applying gradient I have to apply some complicated mathematical operation
train_op=optmize.apply_gradients(grads_and_vars)
train_epochs=10
input_x = np.arange(25).reshape([1,5,5,1])
input_y = np.arange(1)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for epoch in range(train_epochs):
sess.run(train_op, feed_dict={x: input_x, y: input_y})
У меня есть фильтр 5 * 5 с именем my_filter, и яЯ хочу, чтобы все его элементы были обучены, за исключением одного из них, например, для элемента (1,1), и мне нужно, чтобы последний элемент определялся остальными элементами.Это должно быть сделано в каждой итерации.Это именно то, где моя проблема.Я знаю, как получить доступ к матрице весов после окончания обучения, но я не знаю, как это сделать в каждой итерации.
В своем коде я сначала вычислил градиенты, затем внес изменения изатем применили градиенты.Но проблема в том, что градиенты - это кортежи типов, например тензор, с которыми нелегко работать в Numpy.Мне нужен какой-то метод для преобразования этих данных в более привычные типы Numpy.