Я извлек веса и смещения для моих скрытых полностью связанных слоев Tensorflow (3 скрытых-ReLU, 1 выходной-NoActivation) следующим образом:
trainable_variables = tf.trainable_variables()
kernels_list = [trainable_variable for trainable_variable in trainable_variables if "DQN" in trainable_variable.name and "kernel" in trainable_variable.name]
biases_list = [trainable_variable for trainable_variable in trainable_variables if "DQN" in trainable_variable.name and "bias" in trainable_variable.name]
sess.run(tf.global_variables_initializer())
kval_list = [sess.run(kernels_list[i]) for i in range(len(kernels_list))]
bval_list = [sess.run(biases_list[i]) for i in range(len(biases_list))]
Учитывая, что модель полностью обучена, я хочу использовать эти весовые коэффициенты и отклонения для выполнения "прогнозирования с пустыми краями". У меня есть входной массив, который идет к первому скрытому слою, затем numpy использует эти веса и смещения, чтобы найти выходные данные из первого скрытого слоя и т. Д. Вот код, который я использую, чтобы попытаться выполнить эти вычисления:
x = state # state is my 1 dimensional input array
for i in range(0, len(kernels_list)):
weights = kval_list[i]
biases = bval_list[i]
w = x.dot(weights)
w += biases
out = np.maximum(w, 0) # ReLU
if i == len(kernels_list) - 1: # If output layer, no ReLU
out = w
x = out # Input to the next layer
Однако, когда я сравниваю окончательное значение x
(выходной слой) с выходным слоем с помощью прогноза Tensorflow, я получаю разные значения для каждого выходного узла ... Я неправильно выполняю свои матричные вычисления? Входной слой имеет 1140 узлов, поэтому x.shape = (1140,)
изначально, а первый скрытый слой имеет 600 узлов, поэтому weights.shape = (1140, 600)
и biases.shape = (600,)
в первой итерации.