Почему мои нейронные сети Tensorflow работают так медленно после того, как я начал их тренировать? - PullRequest
0 голосов
/ 24 ноября 2018

Моя Нейронная сеть Tensorflow становится все медленнее по мере обучения.Каждый раз, когда я тренирую сеть, она действует все медленнее и медленнее.

После примерно 30-й итерации обучения она становится невыносимо медленной и практически непригодна для использования.К 60-й итерации программа перестала отвечать.

Я не думал, что эта нейронная сеть настолько сложна.Это простая трехслойная сеть, объединенная с Tensorflow.

Ребята, вы не знаете, как решить эту проблему?

import tensorflow as tf

hidden_1_layer = {'weights': tf.Variable(tf.random_normal([37500, 500])),
                  'biases': tf.Variable(tf.random_normal([500]))}
hidden_2_layer = {'weights': tf.Variable(tf.random_normal([500, 250])),
                  'biases': tf.Variable(tf.random_normal([250]))}
hidden_3_layer = {'weights': tf.Variable(tf.random_normal([250, 125])),
                  'biases': tf.Variable(tf.random_normal([125]))}
output_layer = {'weights': tf.Variable(tf.random_normal([125, 1])),
                'biases': tf.Variable(tf.random_normal([1]))}

class ImageNN():
    def train(self, array, target):
        x = tf.placeholder('float', name='x')
        l1 = tf.add(tf.matmul(x, hidden_1_layer['weights']), hidden_1_layer['biases'])
        l1 = tf.nn.relu(l1)
        l2 = tf.add(tf.matmul(l1, hidden_2_layer['weights']), hidden_2_layer['biases'])
        l2 = tf.nn.relu(l2)
        l3 = tf.add(tf.matmul(l2, hidden_3_layer['weights']), hidden_3_layer['biases'])
        l3 = tf.nn.relu(l3)
        output = tf.add(tf.matmul(l3, output_layer['weights']), output_layer['biases'])
        output = tf.nn.sigmoid(output)
        cost = tf.square(output-target)
        optimizer = tf.train.AdamOptimizer().minimize(cost)
        array = array.reshape(1, 37500)
        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            sess.run(optimizer, feed_dict={x: array})
            sess.close()
        del x, l1, l2, output, cost, optimizer

    #Do computations with our artificial nueral network
    def predict(self, data):          #Input data is of size (37500,)
        x = tf.placeholder('float', name='x')    #get data into the right rank (dimensions), this is just a placeholder, it has no values
        l1 = tf.add(tf.matmul(x, hidden_1_layer['weights']), hidden_1_layer['biases'])
        l1 = tf.nn.relu(l1)
        l2 = tf.add(tf.matmul(l1, hidden_2_layer['weights']), hidden_2_layer['biases'])
        l2 = tf.nn.relu(l2)
        l3 = tf.add(tf.matmul(l2, hidden_3_layer['weights']), hidden_3_layer['biases'])
        l3 = tf.nn.relu(l3)
        output = tf.add(tf.matmul(l3, output_layer['weights']), output_layer['biases'])
        output = tf.nn.sigmoid(output)
        data = data.reshape(1, 37500)
        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            theOutput = sess.run(output, feed_dict={x: data})
            sess.close()
        del x, l1, l2, output, data
        return theOutput

1 Ответ

0 голосов
/ 24 ноября 2018

Звучит как проблема с памятью.Вы не удаляете l3 или массив в своем методе поезда или l3 в своем методе прогнозирования.Я не думаю, что это является причиной проблемы, поскольку интерпретатор Python все равно должен ее выбрасывать.

Как вы называете этот класс?Возможно, вы держите вывод в памяти, и он становится очень большим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...