【发布时间】:2019-12-27 23:55:17
【问题描述】:
我正在使用 Anaconda 1.9.7 安装的 Jupyter Notebook 来运行使用 Tensorflow、Keras、Python 3.x 和 Matplotlib 的机器学习模型。当我从 Mac 上的终端运行代码时,一切运行良好,并且图表被绘制到外部窗口。当我在 Jupyter Notebook 中运行相同的代码时,内核会在代码第一次使用 Matplotlib 时死掉并重新启动。
最初,我没有使用“%matplotlib inline”,所以我将它添加到顶部,但图表仍然没有显示。我创建了一个简单的用例(不是此处提供的机器学习代码)并将图表内联到 Jupyter Notebook。当我从 Mac 上的终端运行当前代码时,它可以正常运行,并且图形显示到外部窗口。
get_ipython().run_line_magic('matplotlib', 'inline')
import tensorflow as tf
from keras.datasets import reuters
import numpy as np
np_load_old = np.load
np.load = lambda *a,**k: np_load_old(*a, allow_pickle=True, **k)
(train_data, train_labels), (test_data, test_labels) = reuters.load_data(num_words=10000)
np.load = np_load_old
word_index = reuters.get_word_index()
reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])
decoded_newswire = ' '.join([reverse_word_index.get(i - 3, '?') for i in train_data[10]])
decoded_newswire
def vectorize_sequences(sequences, dimension=10000):
results = np.zeros((len(sequences), dimension))
for i, sequence in enumerate(sequences):
results[i, sequence] = 1
return results
x_train = vectorize_sequences(train_data)
x_test = vectorize_sequences(test_data)
from keras.utils.np_utils import to_categorical
one_hot_train_labels = to_categorical(train_labels)
one_hot_test_labels = to_categorical(test_labels)
from keras import models
from keras import layers
model = models.Sequential()
model.add(layers.Dense(64, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(46, activation='softmax'))
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
x_val = x_train[:1000]
partial_x_train = x_train[1000:]
y_val = one_hot_train_labels[:1000]
partial_y_train = one_hot_train_labels[1000:]
history = model.fit(partial_x_train, partial_y_train, epochs=3, batch_size=512, validation_data=(x_val, y_val))
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(1, len(loss) + 1)
import matplotlib.pyplot as plt
plt.title('Training and validation loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.show()
我希望最后一行在 Jupyter Notebook 中内联绘制图形。相反,内核在“plt.title('Training and validation loss')”行中死亡,当我独立运行该行时,它会给出错误“NameError:name 'plt' is not defined。”
【问题讨论】:
-
我唯一不同的是使用
%matplotlib inline而不是get_ipython().run_line_magic('matplotlib', 'inline')。但我在该行之后导入plt。 -
我实际上在 Jupyter Notebook 中使用了“%matplotlib inline”。为了将代码插入这篇文章,我将 Notebook 导出为 .py,并且“%matplotlib inline”被翻译为“get_ipython().run_line_magic('matplotlib', 'inline')。”
标签: python-3.x matplotlib keras jupyter-notebook anaconda