Пересчитать значение свертки с нетерпеливым исполнением

1

Я пытаюсь использовать нетерпеливое исполнение.

Я создаю тренировочный набор, вес и слой свертки.

Я объявляю свертку и меняю вес.

Как я могу снова вычислить свертку без повторного объявления слоя?

Я ожидал, что это будет что-то вроде этого:

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)

Но это не работает, значение свертки не обновляется.

Как я могу это сделать?

Теги:
tensorflow

1 ответ

1

Я не совсем понимаю, что вы подразумеваете под "без необходимости повторного объявления слоя".

Метод 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.]],
...
  • 0
    Я хочу сказать, не пересчитывая свертку с помощью: ConvExample = tf.nn.conv2d(TrainingDataExample, WeightExample, strides=[1, 1, 1, 1], padding="VALID", name="Conv") Нет другого способа сделать это? Большое спасибо за ответ
  • 0
    Насколько мне известно, нет. Когда данные хранятся в ячейке памяти, единственный способ изменить это - обновить их чем-то другим. Вы можете скрыть, как это делается программно, но, по сути, выполняется пересчет.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню