Tensorflow Convolution return Nan - PullRequest
       16

Tensorflow Convolution return Nan

0 голосов
/ 18 октября 2018

Я пытаюсь прочитать изображение из папки и выполнить свертку.

Сначала я ввожу эти изображения и упаковываю их как .tfrecords, и декодирую tfrecords с помощью tf.train.batch.Затем я помещаю все данные (изображение, метку) в свертку (как код).На этом шаге bias (b_conv1) и weight (w_conv1) будут Нан , и модель больше не будет работать.

image_batch, label_batch = decodeTFRecord(dirPath,batch_size)
image_batch = tf.reshape(image_batch,[-1,128*128])
label_batch = tf.one_hot(label_batch,Label_size)

x = tf.placeholder(tf.float32,[None,128*128])
y = tf.placeholder(tf.float32,[None,10])
x_image = tf.convert_to_tensor(tf.reshape(x,[-1,128,128,1]))
#conv1 layer
w_conv1 = weight_variable([5,5,1,32])
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(conv2d(x_image,w_conv1)+b_conv1) #outsize = 128*128*32
h_pool1 = max_pool_2x2(h_conv1) # outsize = 64*64*32

функция conv2d:

def conv2d(x,W):
   return tf.nn.conv2d(x,W,strides=[1,1,1,1],padding ='SAME')

max_pool_2x2 функция:

def max_pool_2x2(x):
    return tf.nn.max_pool(x,ksize=[1,2,2,1], strides=[1,2,2,1],padding='SAME')

Полный код: https://codeshare.io/5O7ddj

1 Ответ

0 голосов
/ 19 октября 2018

Попробуйте меньшую скорость обучения, чтобы начать с 1e-5, и уменьшите начальные веса tf.truncated_normal(shape, stddev = 0.0001) и посмотрите, решит ли какая-либо из этих общих проблем вашу проблему.

На основании комментариев это звучит как один из следующихдве общие проблемы вызвали проблему NaN (пожалуйста, прокомментируйте, если я неправильно прочитал ваш комментарий).

Эта проблема часто возникает, когда веса инициализируются случайным образом, потому что большие веса будут иметь долгий путь для улучшения, что можетпривести к очень крутому шагу градиента, например, проблема взрыва градиента.Небольшой вес / скорость обучения улучшат эту проблему.

Также примечательно, что BatchNorm также будет способствовать решению этой проблемы.Обычно вы можете избежать гораздо больших скоростей обучения именно потому, что BatchNorm не дает вещам выйти из строя, когда сигнал проходит через сеть.

...