0

我正在尝试建立一个用于线性回归的神经网络。我想将正则化部分添加到成本函数中,但每次迭代后成本都不会改变。代码如下:

X = tf.placeholder(tf.float32,[n_x, None], name = "x")
Y = tf.placeholder(tf.float32,[n_y, None], name = "y")
W1 = tf.get_variable("W1", [25,11], initializer = tf.contrib.layers.xavier_initializer())
b1 = tf.get_variable("b1", [25,1], initializer = tf.zeros_initializer())
W2 = tf.get_variable("W2", [25,25], initializer = tf.contrib.layers.xavier_initializer())
b2 = tf.get_variable("b2", [25,1], initializer = tf.zeros_initializer())
W3 = tf.get_variable("W3", [25,25], initializer = tf.contrib.layers.xavier_initializer())
b3 = tf.get_variable("b3", [25,1], initializer = tf.zeros_initializer())
W4 = tf.get_variable("W4", [25,25], initializer = tf.contrib.layers.xavier_initializer())
b4 = tf.get_variable("b4", [25,1], initializer = tf.zeros_initializer())
W5 = tf.get_variable("W5", [12,25], initializer = tf.contrib.layers.xavier_initializer())
b5 = tf.get_variable("b5", [12,1], initializer = tf.zeros_initializer())
W6 = tf.get_variable("W6", [1,12], initializer = tf.contrib.layers.xavier_initializer())
b6 = tf.get_variable("b6", [1,1], initializer = tf.zeros_initializer())
Z1 = tf.add(tf.matmul(W1,X),b1)                                            
A1 = tf.nn.relu(Z1)                                            
Z2 = tf.add(tf.matmul(W2,A1),b2)                                              

A2 = tf.nn.relu(Z2)                                             
Z3 = tf.add(tf.matmul(W3,A2),b3)                                              

A3 = tf.nn.relu(Z3)                                          
Z4 = tf.add(tf.matmul(W4,A3),b4)                                              

A4 = tf.nn.relu(Z4)                                              
Z5 = tf.add(tf.matmul(W5,A4),b5)                                              

A5 = tf.nn.relu(Z5)
Z6 = tf.add(tf.matmul(W6,A5),b6)
A6 = tf.nn.tanh(Z6)      
regulaizers = tf.nn.l2_loss(W1) + tf.nn.l2_loss(W2) + tf.nn.l2_loss(W3) + tf.nn.l2_loss(W4) + tf.nn.l2_loss(W5) + tf.nn.l2_loss(W6)
beta=0.01
cost = (1/(2*m))*tf.reduce_sum(tf.pow(A6-Y, 2) ) + beta * regulaizers
optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(cost)
epoch=1500
init = tf.global_variables_initializer()


with tf.Session() as sess:


      sess.run(init)


      for epoch in range(num_epochs):

          epoch_cost = 0.                     
          num_minibatches = int(m / minibatch_size) 
          minibatches = random_mini_batches(X_train, Y_train, minibatch_size, seed)

          for minibatch in minibatches:


              (minibatch_X, minibatch_Y) = minibatch


              _ , minibatch_cost = sess.run([optimizer, cost], feed_dict={X: minibatch_X, Y: minibatch_Y})


             epoch_cost += minibatch_cost / num_minibatches

通过 epochs 运行脚本后,输出为

Cost after epoch 0: 4.524896

Cost after epoch 100: 0.000041
Cost after epoch 200: 0.000041
Cost after epoch 300: 0.000041
Cost after epoch 400: 0.000041
Cost after epoch 500: 0.000041
Cost after epoch 600: 0.000041
Cost after epoch 700: 0.000041
Cost after epoch 800: 0.000041
Cost after epoch 900: 0.000041
Cost after epoch 1000: 0.000041
Cost after epoch 1100: 0.000041
Cost after epoch 1200: 0.000041
Cost after epoch 1300: 0.000041
Cost after epoch 1400: 0.000041
Cost after epoch 1500: 0.000041
Cost after epoch 1600: 0.000041
Cost after epoch 1700: 0.000041
Cost after epoch 1800: 0.000041
Cost after epoch 1900: 0.000041

初始化参数并提供会话后,您可以看到成本没有变化。我想知道我是否可以得到一些帮助,以及成本函数是否正确。

4

0 回答 0