首页 文章

使用矩阵乘法创建ANN与Tensorflow中的tf.layers.dense()之间有何不同

提问于
浏览
0

我尝试使用矩阵乘法和tf.layers.dense()来训练ANN模型 . 但是我得到了不同的结果,使用矩阵乘法的ANN模型它不能优化损失函数(损失增加) . 两种方法有何不同?

使用矩阵乘法的ANN模型

W1 = tf.Variable(tf.zeros([4,64]))
b1 = tf.Variable(tf.zeros([64]))
y1 = tf.nn.relu(tf.matmul(x, W1) + b1)

W2 = tf.Variable(tf.zeros([64,64]))
b2 = tf.Variable(tf.zeros([64]))
y2 = tf.nn.relu(tf.matmul(y1, W2) + b2)

W3 = tf.Variable(tf.zeros([64,64]))
b3 = tf.Variable(tf.zeros([64]))
y3 = tf.nn.relu(tf.matmul(y2, W3) + b3)

W4 = tf.Variable(tf.zeros([64,3]))
b4 = tf.Variable(tf.zeros([3]))
y_out = tf.nn.softmax(tf.matmul(y3, W4) + b4)

使用tf.layers.dense()的ANN模型

layer1 = tf.layers.dense(x, 64, activation=tf.nn.relu)
layer2 = tf.layers.dense(layer1, 64, activation=tf.nn.relu)
layer3 = tf.layers.dense(layer2, 64, activation=tf.nn.relu)
layer4 = tf.layers.dense(layer3, 64, activation=tf.nn.relu)
layer5 = tf.layers.dense(layer4, 64, activation=tf.nn.relu)
layer6 = tf.layers.dense(layer5, 64, activation=tf.nn.relu)
y_out = tf.layers.dense(layer6, 3 , activation = tf.nn.softmax)

1 回答

  • 2

    您正在使用零初始化权重,这有效地防止网络学习任何内容,因为网络始终输出零,并且渐变始终为零 .

    使用随机值初始化权重,例如小范围(小于0.1)的均匀或高斯分布 .

相关问题