我正在尝试从文件夹读取图像并进行卷积。
首先,我输入这些图像并将其打包为.tfrecords
,并通过tf.train.batch
解码tfrecords。
接下来,我将所有数据(图像,标签)进行卷积(作为代码)。
在此步骤中,bias
(b_conv1)和weight
(w_conv1)将是 Nan ,并且该模型将不再起作用。
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')
答案 0 :(得分:2)
尝试从1e-5
开始降低学习速度,并减小初始权重tf.truncated_normal(shape, stddev = 0.0001)
,然后看看这些常见问题中的任何一个是否都能解决您的问题。
根据评论,听起来这两个常见问题之一导致了NaN
问题(如果我误读了您的评论,请发表评论)。
当权重被随机初始化时,经常会发生此问题,因为大的权重将有很长的路要走以改善,这可能会导致非常陡峭的渐变步骤,例如爆炸梯度问题。较小的权重/学习率将改善此问题。
还值得注意的是BatchNorm也将趋于改善该问题。通常,您可以以更高的学习率来逃避,恰恰是因为BatchNorm可以防止信号通过网络传播时真正摆脱困境。