TensorFlow заставляет ядро ​​умирать на .eval или .run - PullRequest
0 голосов
/ 06 мая 2019

Я использую код тензорного потока в jupyter на MBP 2018 с оперативной памятью 32g.Код взят из главы 9 «Практического машинного обучения с Scikit-Learn & TensorFlow» Джерона. Код успешно работает до момента, когда код вызывает .eval или .run, в результате чего ядро ​​умирает.

https://github.com/ageron/handson-ml/blob/master/09_up_and_running_with_tensorflow.ipynb

Код приведен выше.

Вырезание и вставка вышеуказанного связанного кода в мой собственный блокнот Jupyter с последующим запуском приводит к смерти ядра в ячейке 19:

import numpy as np
from sklearn.datasets import fetch_california_housing

reset_graph()

housing = fetch_california_housing()
m, n = housing.data.shape
housing_data_plus_bias = np.c_[np.ones((m, 1)), housing.data]

X = tf.constant(housing_data_plus_bias, dtype=tf.float32, name="X")
y = tf.constant(housing.target.reshape(-1, 1), dtype=tf.float32, name="y")
XT = tf.transpose(X)
theta = tf.matmul(tf.matmul(tf.matrix_inverse(tf.matmul(XT, X)), XT), y)

with tf.Session() as sess:
    theta_value = theta.eval()

и в ячейке 25:

reset_graph()

n_epochs = 1000
learning_rate = 0.01

X = tf.constant(scaled_housing_data_plus_bias, dtype=tf.float32, name="X")
y = tf.constant(housing.target.reshape(-1, 1), dtype=tf.float32, name="y")
theta = tf.Variable(tf.random_uniform([n + 1, 1], -1.0, 1.0, seed=42), name="theta")
y_pred = tf.matmul(X, theta, name="predictions")

error = y_pred - y
mse = tf.reduce_mean(tf.square(error), name="mse")

gradients = 2/m * tf.matmul(tf.transpose(X), error)

training_op = tf.assign(theta, theta - learning_rate * gradients)

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)

    for epoch in range(n_epochs):
        if epoch % 100 == 0:
            print("Epoch", epoch, "MSE =", mse.eval())
        sess.run(training_op)

    best_theta = theta.eval()

Чтобы найти проблему, я попытался в этой последней ячейке выполнить без mse.eval () и без sess.run (training_op) с успехом.То есть, оно не убивает ядро, если последний раздел -

with tf.Session() as sess:
    sess.run(init)

    for epoch in range(n_epochs):
        if epoch % 100 == 0:
            print("Epoch", epoch, "MSE =")

или если оно:

with tf.Session() as sess:
    sess.run(init)

    for epoch in range(n_epochs):
        print('hi')
    best_theta = theta.eval()

, но оно умирает для любого из этих двух:

(1)

with tf.Session() as sess:
    sess.run(init)

    for epoch in range(n_epochs):
        if epoch % 100 == 0:
            print("Epoch", epoch, "MSE =", mse.eval())

(2)

with tf.Session() as sess:
    sess.run(init)

    for epoch in range(n_epochs):
        sess.run(training_op)

Я дополнительно пробовал этот код в Spyder и переустанавливал тензор потока.Те же результаты.Подобный код в главе 9 книги Джерона убивает мое ядро, и я хотел бы продолжить, наслаждаясь инструкциями его книги.

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