Tensorflow - закрывает ли клавиатурное прерывание текущий сеанс

Я использую Tensorflow для тестирования нейронной сети. Это выдержка из моего кода:

with tf.Session() as sess:
# Initialize variables
sess.run(init)

# Training cycle
for epoch in range(150):
    avg_cost = 0.
    total_batch = int(X_train.shape[0]/batch_size)
    batch_range = list(range(batch_size, int(X_train.shape[0]),batch_size))
    # Loop over all batches
    i = 0
    while i < total_batch - 1:
        start_idx = batch_range[i]
        end_idx = batch_range[i+1]
        batch_x, batch_y = X_train.iloc[start_idx:end_idx,:], y_train.iloc[start_idx:end_idx,:]
        # Run optimization op (backprop) and cost op (to get loss value)
        _, c = sess.run([optimizer, cost], feed_dict={x: batch_x,
                                                      y: batch_y})
        # Compute average loss
        avg_cost += c / total_batch
        i = i + 1

Если я использую прерывание клавиатуры (например, control + c), программа останавливается, но кажется, что сессия также закрыта. Например, если я пройду .eval()Я бы получил следующую ошибку:

ValueError: Cannot use the default session to evaluate tensor: the tensor's graph is different from the session's graph. Pass an explicit session to `eval(session=sess)`.

Я полагаю, это означает, что моя сессия закрыта? Как я могу прервать программу, не закрывая сеанс?

1 ответ

Решение

Когда вы нажимаете ctrl-c, генерируется прерывание, которое заставит выполнение покинуть блок with. Это приведет к закрытию сеанса, так как основная цель блока with состоит в том, чтобы сделать автоматический вывод из строя, см., Например, это объяснение (только первое попадание в Google для меня).

Таким образом, заменив

with tf.Session() as sess:

с

sess = tf.Session()

должен решить проблему.

Другие вопросы по тегам