#python #matplotlib
Вопрос:
Мой фрагмент кода, который уже работал без каких-либо проблем, теперь вызывает
Traceback (most recent call last):
File "~/PycharmProjects/RL/DNN_NSL_CalifHou.py", line 131, in <module>
df1.plot(ax=axes[0,0])
File "~AppDataLocalProgramsPythonPython37libsite-packagespandasplotting_core.py", line 794, in __call__
return plot_backend.plot(data, kind=kind, **kwargs)
File "~AppDataLocalProgramsPythonPython37libsite-packagespandasplotting_matplotlib__init__.py", line 62, in plot
plot_obj.generate()
File "~AppDataLocalProgramsPythonPython37libsite-packagespandasplotting_matplotlibcore.py", line 284, in generate
self._adorn_subplots()
File "~AppDataLocalProgramsPythonPython37libsite-packagespandasplotting_matplotlibcore.py", line 472, in _adorn_subplots
sharey=self.sharey,
File "~AppDataLocalProgramsPythonPython37libsite-packagespandasplotting_matplotlibtools.py", line 307, in _handle_shared_axes
layout[ax.rowNum, ax.colNum] = ax.get_visible()
AttributeError: 'AxesSubplot' object has no attribute 'rowNum'
что соответствует
fig, axes = plt.subplots(nrows=2, ncols=2)
df1 = pd.DataFrame(history.history)
df1.plot(ax=axes[0,0])
axes[0,0].set_title('model')
Что-нибудь сломано в matplotlib?
Вот выполнимый фрагмент:
import pandas as pd
import matplotlib.pyplot as plt
import os
import time
import tensorflow as tf
from sklearn.datasets import fetch_california_housing
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
root_logdir = os.path.join(os.curdir, "my_California_housing_logs")
def get_run_logdir():
run_id = time.strftime("run_%Y_%m_%d-%H_%M_%S")
return os.path.join(root_logdir, run_id)
run_logdir = get_run_logdir()
#############################################################
housing = fetch_california_housing()
X_train_full, X_test, y_train_full, y_test = train_test_split(
housing.data, housing.target)
X_train, X_valid, y_train, y_valid = train_test_split(
X_train_full, y_train_full)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_valid = scaler.fit_transform(X_valid)
X_test = scaler.fit_transform(X_test)
model = tf.keras.models.Sequential([
tf.keras.layers.InputLayer(input_shape=X_train.shape[1:]),
tf.keras.layers.BatchNormalization(momentum=0.999),
tf.keras.layers.Dense(48, tf.keras.activations.selu, kernel_initializer="lecun_normal"),
tf.keras.layers.BatchNormalization(momentum=0.999),
tf.keras.layers.Dense(48, tf.keras.activations.selu, kernel_initializer="lecun_normal"),
tf.keras.layers.BatchNormalization(momentum=0.999),
tf.keras.layers.Dense(1, kernel_initializer="lecun_normal")
])
model.compile(loss=tf.keras.losses.mean_squared_error,
optimizer=tf.keras.optimizers.Adam(learning_rate = 0.0003, beta_1=0.9, beta_2=0.999),
metrics=[tf.keras.metrics.MeanAbsoluteError()])
def exponential_decay(lr0, s):
def exponential_decay_fn(epoch):
return lr0 * 0.1 ** (epoch / s)
return exponential_decay_fn
exponential_decay_fn = exponential_decay(lr0=0.01, s=20)
lr_scheduler_cb = tf.keras.callbacks.LearningRateScheduler(exponential_decay_fn)
checkpoints_cb = tf.keras.callbacks.ModelCheckpoint("my_keras_model.h5",
save_best_only=True)
early_stopping_cb = tf.keras.callbacks.EarlyStopping(patience=10,
restore_best_weights=True)
tensorboard_cb = tf.keras.callbacks.TensorBoard(run_logdir)
history = model.fit(X_train, y_train, epochs=1,
validation_data=(X_valid, y_valid),
callbacks=[checkpoints_cb, early_stopping_cb, tensorboard_cb, lr_scheduler_cb])
fig, axes = plt.subplots(nrows=2, ncols=2)
df1 = pd.DataFrame(history.history)
df1.plot(ax=axes[0,0])
axes[0,0].set_title('model')
plt.show()
Редактировать:
Вот также то, что я получаю из буфера обмена:
loss mean_absolute_error val_loss val_mean_absolute_error lr
0 0.673669 0.596114 2.244989 1.277523 0.01
добавление df1.head().to_clipboard(sep='\s ', index=True)
.
Комментарии:
1. Вероятно , вам следует просто включить
df1.head().to_clipboard(sep='\s ', index=True)
, так как, чтобы добраться доhistory
любого, кто хочет помочь, необходимоkeras
/tensorflow
установлено.2. @TrentonMcKinney: Пожалуйста, проверьте примененное редактирование.
3.
.head()
должно быть 5 рядов. Если вы сделали.head()
это и получили только 1 строку, то, вероятно, это проблема. Однако даже с 1 строкой данных я могу запустить создание графика без проблем. Какая версия pandas и matplotlib установлены?4. Похоже, вы не используете среду Anaconda, поэтому я бы обновил
pandas
pip update pandas
ее . Текущая версия 1.3.25. @TrentonMcKinney: Большое спасибо, что указали на это! Ошибка исчезла при использовании последней версии
pandas
.