嗨,我是 tensorflow 神经网络的新手。我获取了 space365 数据集的一小部分。我想制作一个神经网络来在 10 个地点之间进行分类。
为此,我尝试制作一个 vgg 网络的小型副本。我遇到的问题是,在 softmax 函数的输出处,我得到了一个单热编码数组。在我的代码中查找问题时,我发现 relu 函数的输出要么是 0,要么是一个很大的数字(大约 10000)。
我不知道我错在哪里。这是我的代码:
def variables(shape):
return tf.Variable(2*tf.random_uniform(shape,seed=1)-1)
def layerConv(x,filter):
return tf.nn.conv2d(x,filter, strides=[1, 1, 1, 1], padding='SAME')
def maxpool(x):
return tf.nn.max_pool(x,[1,2,2,1],[1,2,2,1],padding='SAME')
weights0 = variables([3,3,1,16])
l0 = tf.nn.relu(layerConv(input,weights0))
l0 = maxpool(l0)
weights1 = variables([3,3,16,32])
l1 = tf.nn.relu(layerConv(l0,weights1))
l1 = maxpool(l1)
weights2 = variables([3,3,32,64])
l2 = tf.nn.relu(layerConv(l1,weights2))
l2 = maxpool(l2)
l3 = tf.reshape(l2,[-1,64*32*32])
syn0 = variables([64*32*32,1024])
bias0 = variables([1024])
l4 = tf.nn.relu(tf.matmul(l3,syn0) + bias0)
l4 = tf.layers.dropout(inputs=l4, rate=0.4)
syn1 = variables([1024,10])
bias1 = variables([10])
output_pred = tf.nn.softmax(tf.matmul(l4,syn1) + bias1)
error = tf.square(tf.subtract(output_pred,output),name='error')
loss = tf.reduce_sum(error, name='cost')
#TRAINING
optimizer = tf.train.GradientDescentOptimizer(learning_rate)
train = optimizer.minimize(loss)
神经网络的输入是256*256像素的归一化灰度图像。 学习率为 0.1,批量大小为 32。
提前谢谢您!!
最佳答案
reLu 的本质是:
def relu(vector):
vector[vector < 0] = 0
return vector
和softmax:
def softmax(x):
e_x = np.exp(x - np.max(x))
return e_x / e_x.sum(axis=0)
softmax 的输出是一个 one-hot 编码数组,这意味着存在问题,而且可能有很多问题。
您可以尝试降低初学者的learning_rate,您可以使用1e-4
/1e-3
并检查。如果不起作用,请尝试添加一些正则化。我也对你的权重初始化表示怀疑。
调节:这是回归的一种形式,将系数估计限制/正则化或缩小到零。换句话说,这种技术不鼓励学习更复杂或更灵活的模型,以避免过度拟合的风险。 -Regularization in ML
链接到:Build a multilayer neural network with L2 regularization in tensorflow
关于python - Relu函数,返回0和大数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50085955/