【问题标题】:Python: Cost keeps increasing in a neural network that uses TensorFlowPython:使用 TensorFlow 的神经网络的成本不断增加
【发布时间】:2019-10-28 10:40:00
【问题描述】:

我正在尝试使用 TensorFlow 创建一个神经网络,但我的成本不断增加。 到目前为止,这是我的代码:

class AI_core:
    def __init__(self, nodes_in_each_layer):
        self.data_in_placeholder = tf.placeholder("float", [None, nodes_in_each_layer[0]])
        self.data_out_placeholder = tf.placeholder("float")
        self.init_neural_network(nodes_in_each_layer)

    def init_neural_network(self, n_nodes_h):
        #n_nodes_h contains the number of nodes for each layer
        #n_nodes_h[0] = number of inputs
        #n_nodes_h[-1] = number of outputs
        self.layers = [None for i in range(len(n_nodes_h)-1)]
        for i in range(1, len(n_nodes_h)):
            self.layers[i-1] = {"weights":tf.Variable(tf.random_normal([n_nodes_h[i-1], n_nodes_h[i]])),
            "biases":tf.Variable(tf.random_normal([n_nodes_h[i]]))}

    def neural_network_model(self, data):
        for i in range(len(self.layers)):
            data = tf.matmul(data, self.layers[i]["weights"]) + self.layers[i]["biases"]
            if i != len(self.layers):
                data = tf.nn.relu(data)
        return data

    def train_neural_network(self, data):
        prediction = self.neural_network_model(self.data_in_placeholder)
        cost = tf.reduce_mean(tf.square(self.data_out_placeholder-prediction))
        optimiser = tf.train.GradientDescentOptimizer(learning_rate=0.0001).minimize(cost)

        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            epoch_loss = 0
            for _ in range(int(data.length)):
                epoch_x, epoch_y = data.next_batch()
                c = sess.run(cost, feed_dict={self.data_in_placeholder: epoch_x, self.data_out_placeholder: epoch_y})
                _ = sess.run(optimiser, feed_dict={self.data_in_placeholder: epoch_x, self.data_out_placeholder: epoch_y})
                epoch_loss += np.sum(c)

                print("loss =", epoch_loss)

现在我正在尝试让网络逼近 math.sin 函数。 我设置了 nodes_in_each_layer = [1, 5, 5, 5, 1] 和 batch_size = 3。这是输出:

loss = 0.8417138457298279
loss = 1.190976768732071
loss = 1.8150676786899567
loss = 2.433938592672348
loss = 3.092040628194809
loss = 3.478498786687851
loss = 3.7894928753376007
loss = 4.598285228013992
loss = 5.418278068304062
loss = 5.555390268564224

【问题讨论】:

    标签: python-3.x tensorflow neural-network


    【解决方案1】:

    看起来您一直在将损失值与之前迭代中的值相加。

    使用 tf.Session() 作为 sess: sess.run(tf.global_variables_initializer()) epoch_loss = 0 对于 _ in range(int(data.length)): epoch_x, epoch_y = data.next_batch() c = sess.run(成本,feed_dict={self.data_in_placeholder:epoch_x,self.data_out_placeholder:epoch_y}) _ = sess.run(优化器,feed_dict={self.data_in_placeholder:epoch_x,self.data_out_placeholder:epoch_y}) epoch_loss += np.sum(c) 打印(“损失=”,epoch_loss)

    【讨论】:

      猜你喜欢
      • 2018-03-11
      • 1970-01-01
      • 2017-11-15
      • 2016-03-21
      • 1970-01-01
      • 2023-03-14
      • 2018-04-21
      • 1970-01-01
      • 2020-10-29
      相关资源
      最近更新 更多