早上好,我是一个Python初学者,正在尝试构建我的第一个神经网络。有什么方法可以绘制R2值随epochs的变化吗?我评估R2值的方式如下:r2_score(y_test_pred, y_test)
。我以这种方式构建了一个全连接神经网络:
optimizer = tf.keras.optimizers.Adam(lr=0.001)model = Sequential()# ,kernel_regularizer=l2(c), bias_regularizer=l2(c)model.add(Dense(100, input_shape = (X_train.shape[1],), activation = 'relu',kernel_initializer='glorot_uniform'))model.add(Dropout(0.2))model.add(Dense(100, activation = 'relu',kernel_initializer='glorot_uniform'))model.add(Dropout(0.2))model.add(Dense(100, activation = 'relu',kernel_initializer='glorot_uniform'))model.add(Dense(1,activation = 'linear',kernel_initializer='glorot_uniform'))model.compile(loss = 'mse', optimizer = optimizer, metrics = ['mse'])history = model.fit(X_train, y_train, epochs = 100, validation_split = 0.1, shuffle=False, batch_size=250 )history_dict = history.history
数据集由18个特征和1个标签组成,这是一个回归任务。
回答:
你只需在compile
行中添加它即可。
model.compile(loss = 'mse', optimizer = optimizer, metrics = ['mse', r2_score])
如果你想这样做,你需要创建一个可以被Keras理解的指标,
import tf.keras.backend as Kdef r2_score(y_true, y_pred): SS_res = K.sum(K.square(y_true - y_pred)) SS_tot = K.sum(K.square(y_true - K.mean(y_true))) return ( 1 - SS_res/(SS_tot + K.epsilon()) )
代码来自于kaggle
抱歉,我忘记添加Tensorboard部分了。
如果你想查看训练过程中损失/指标的变化,可以使用Tensorboard,如文档中所述
logdir = "logs/" + datetime.now().strftime("%Y%m%d-%H%M%S")tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=logdir)history = model.fit(X_train, y_train, epochs = 100, validation_split = 0.1, shuffle=False, batch_size=250, calllbacks=[tensorboard_callback])
然后在终端中使用以下命令访问Tensorboard
tensorboard --logdir logs
然后通过浏览器访问localhost:6006
来查看Tensorboard