Я пытаюсь использовать нетерпеливое исполнение.
Я создаю тренировочный набор, вес и слой свертки.
Я объявляю свертку и меняю вес.
Как я могу снова вычислить свертку без повторного объявления слоя?
Я ожидал, что это будет что-то вроде этого:
import tensorflow as tf
tf.enable_eager_execution()
tfe = tf.contrib.eager
TrainingDataExample = tf.constant(0.5, shape=[8, 5, 6, 1], name="Inputs")
WeightExample = tfe.Variable(tf.truncated_normal([1, 3, 1, 4], seed=1), name="Weights")
ConvExample = tf.nn.conv2d(TrainingDataExample, WeightExample, strides=[1, 1, 1, 1], padding="VALID", name="Conv")
NewWeightExample = tf.constant(2.0, shape=[1, 3, 1, 4], name="NewWeights")
WeightExample = tf.assign(WeightExample, NewWeightExample )
result = ConvExample
print (result)
Но это не работает, значение свертки не обновляется.
Как я могу это сделать?
Я не совсем понимаю, что вы подразумеваете под "без необходимости повторного объявления слоя".
Метод tf.nn.conv2d
вычисляет tf.nn.conv2d
свертку. Это как вычислить свертку с TensorFlow.
Теперь вы предварительно оценили свертку на TrainingDataExample
и сохранили ее в ConvExample
. NewWeightExample
новый набор весов, NewWeightExample
и назначая его переопределить переменную WeightExample
, он автоматически не изменяет значение свертки, ранее вычисленное в ConvExample
.
Следовательно, вам придется снова пересчитать свертку, используя новый набор весов. Вы можете сделать это, просто перезапустив:
ConvExample = tf.nn.conv2d(TrainingDataExample, WeightExample,
strides=[1, 1, 1, 1], padding="VALID",
name="Conv")
Чтобы получить следующий результат:
<tf.Tensor: id=36, shape=(8, 5, 4, 4), dtype=float32, numpy=
array([[[[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.]],
...
ConvExample = tf.nn.conv2d(TrainingDataExample, WeightExample, strides=[1, 1, 1, 1], padding="VALID", name="Conv")
Нет другого способа сделать это? Большое спасибо за ответ