У меня есть архитектура CNN для вывода координат прямоугольника вокруг объекта:
Однако, если я реализую его в tf, потеря станет nan даже после одной эпохи. Я пробовал обрезку градиента и пакетную нормализацию, но ничего не вышло. Подозреваю, что с моей потерей что-то не так, вот соответствующий код:
...
output = tf.layers.dense(dense, 4, name="output")
# Loss
error = output-y
error_sq = tf.square(error)
loss = tf.reduce_mean(error_sq, axis=-1)
# Training operation
optimizer = tf.train.RMSPropOptimizer(learning_rate=0.001, momentum=0.9, decay=0.0, epsilon=1e-08)
training_op = optimizer.minimize(loss)
Я реализовал ту же архитектуру с keras, и она отлично работает:
...
model.add(Dense(4))
# Optimizer
optimizer = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)
# Compile
model.compile(optimizer = optimizer , loss = "mean_squared_error", metrics=["mean_squared_error"])
Я не вижу, чем они отличаются ..
Примечание 1: я также получаю nan, если отбрасываю аргумент axis = -1, однако я включил его, поскольку среднее значение keras вычисляется с тем же аргументом.
Примечание 2: даже если я тренирую только плотный слой на входе, модель keras медленно сходится, а модель тензорного потока - нет.
tf.losses.mean_squared_error
, чтобы получить среднеквадратичную ошибку в тензорном потоке. - person BiBi   schedule 19.12.2018error
? - person BiBi   schedule 19.12.2018loss = tf.reduce_mean(error_sq, axis=0)
вместоaxis=-1
, но это должно быть проблемой. - person BiBi   schedule 19.12.2018