Выходной слой моего CNN должен использовать функцию RBF, описываемую как «каждый нейрон выводит квадрат евклидова расстояния между его входным вектором и его вектором веса».Я реализовал это как
dense2 = tf.square(tf.norm(dense1 - tf.transpose(dense2_W)))
, где dense1
- тензор формы (?, 84)
.Я пытался объявить dense2_W
, весовые коэффициенты, как переменную формы (84, 10)
, так как он выполняет классификацию чисел и должен иметь 10 выходных данных.Запустив код с партией 100 я получаю эту ошибку: InvalidArgumentError: Incompatible shapes: [100,84] vs. [10,84]
.Я считаю, что это связано с вычитанием.
Я обучаю сеть, повторяя этот код:
x_batch, y_batch = mnist.train.next_batch(100)
x_batch = tf.pad(x_batch, [[0,0],[2,2],[2,2],[0,0]]).eval() # Pad 28x28 -> 32x32
sess.run(train_step, {X: x_batch, Y: y_batch})
, а затем проверяю его, используя весь набор тестов, таким образом, размер пакета в сети.должен быть динамическим.
Как я могу обойти это?Размер пакета должен быть динамическим, как в случае dense1
, но я не понимаю, как создать переменную с динамическим размером и транспонировать ее (dense2_W
).