Tensorflow / Slim - сегментация изображения с регуляризацией: невозможно умножить последовательность на не-int типа 'float - PullRequest
0 голосов
/ 02 марта 2019

Используя тензор потока / слим, я использую слой conv2d с регуляризацией l2 следующим образом:

net = slim.conv2d(inputs, n_filters, filter_size, weights_regularizer=slim.l2_regularizer(0.001), activation_fn=None)

Чтобы упорядочить общие потери с кросс-энтропией и потерями регуляризации, я написал следующий скрипт:

loss_cross = tf.nn.softmax_cross_entropy_with_logits_v2(logits=network, labels=net_output)
beta = 0.01
regularization_losses = tf.losses.get_regularization_losses()
losses = loss_cross + beta * regularization_losses
loss = tf.reduce_mean(losses)
opt = tf.train.AdamOptimizer(lr).minimize(0.0001, var_list=[var for var in tf.trainable_variables()])

, который я получаю сообщение об ошибке:

Traceback (most recent call last):
  File "main_orgsettings_losses.py", line 288, in <module>
    losses = loss_cross + beta * regularization_losses
TypeError: can't multiply sequence by non-int of type 'float'

Когда я удаляю beta, я получаю ошибку:

InvalidArgumentError: Incompatible shapes: [1,512,512] vs. [1]

который [512,512] во входном размере, а [1] - единственный слой, который имеет регуляризацию.

Когда я добавляю регуляризацию к потере после redu_mean, например:

loss = tf.reduce_mean(losses) + regularization_losses

, это работает, но яЯ думаю, что это не то, что подразумевается как beta не используется, и я думаю, что reguilarization_loss следует добавить к losses до tf.reduce_mean

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...