Как изменить ввод слоя tenorflow.layers.dense ()? - PullRequest
0 голосов
/ 10 сентября 2018

В tenenflowflow.dense (входы, единицы, активация) реализуется многоуровневый слой персептрона с произвольной функцией активации. Скажи, что я определил свой плотный слой так:

inputx = tf.placeholder(float, shape=[batch_size, input_size])
dense_layer = tf.layers.dense(inputx, 128, tf.nn.relu)

Теперь позже я хочу передать ему какой-нибудь другой ввод, скажем, после восстановления с контрольной точки или просто по той же диаграмме по какой-то причине:

inputx_2 = tf.some_operation(whatever_thisdoes, shape = [batch_size_2, input_size])
inputx = tf.placeholder(float, shape=[batch_size, input_size])
dense_layer = tf.layers.dense(inputx, 128, tf.nn.relu)

Как теперь я могу получить плотный слой и, возможно, уже подготовленные веса, чтобы применить к inputx_2? (Без присвоения input_y значения inputx_2, если возможно?) Приведет ли какая-либо проблема к другому batch_size (batch_size_2 вместо batch_size)?

1 Ответ

0 голосов
/ 10 сентября 2018

Вы можете использовать аргумент 'name' и 'reuse' для достижения этого поведения:

inputx = tf.placeholder(float, shape=[batch_size, input_size])
inputx_2 = tf.some_operation(whatever_thisdoes, shape = [batch_size_2, input_size])

dense_layer = tf.layers.dense(inputx, 128, tf.nn.relu, name='dense_layer')
dense_layer2 = tf.layers.dense(inputx_2, 128, tf.nn.relu, name='dense_layer', reuse=True)

И плотность, и плотность_плотика разделяют веса благодаря атрибуту 'повторное использование', но плотское_приложение применяется к input_x, а плотность_2 к inputx_2.

Не вызовет ли проблема наличие другого batch_size (batch_size_2 вместо batch_size)?

Нет. Вы можете легко это проверить:

with tf.Session() as sess:
    out = dense_layer.eval({inputx: np.ones([batch_size, input_size])})
    out2 = dense_layer2.eval({inputx_2: np.ones([batch_size_2, input_size])})
    assert np.array_equal(out[0,:], out2[0,:])

Я советую вам создать функцию прямого прохода, чтобы легко воспроизвести это поведение для всех ваших моделей, например:

def forward_pass(x, name='Model', reuse=False):
     with tf.variable_scope(name, reuse=reuse):
         x = tf.some_ops(x, ...)
         ...
     return x

Затем вы можете передать любой тензор для прямого прохода, в вашем случае:

 out = forward_pass(inputx)
 out2 = forward_pass(inputx_2, reuse=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...