为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 KERAS 获取 DNN 最后一层的值?

如何使用 KERAS 获取 DNN 最后一层的值?

MMMHUHU 2023-10-11 15:48:14
我刚刚开始使用 Keras 训练一个简单的 DNN,并且正在努力设置自定义损失函数,以下是模型的代码:X_train = train_dataframe.to_numpy()[:, 0:4]Y_train = train_dataframe.to_numpy()[:, 4]model = Sequential()model.add(Dense(1000, input_shape=(4,), activation='relu'))model.add(Dense(1000, activation='relu'))model.add(Dense(Y_train.shape[0], activation='linear', activity_regularizer=regularizers.l1(0.02)))def custom_loss(y_true, y_pred):     mse_loss = tf.keras.losses.mean_squared_error(y_true,np.ones((450, 4)) * y_pred)                                                  return mse_loss + y_predmodel.compile("adam", custom_loss(X_train, model.layers[2].output), metrics=["accuracy"])model.fit(X_train, Y_train, epochs=5, batch_size=1)我将简要解释一下。我得到了一个包含 450 个样本的训练集,每个样本有 4 个特征作为输入,以及一个与训练集配对的 (450,1) 数值向量。现在,我想要获得的是一种 LASSO 回归,方法是在最后一层应用活动正则化器,然后构建自定义损失函数,其中我将 MSE 放在 y_true (这是输入) y_pred 之间,y_pred 不是输出,而是输出层值与 (450,4) 矩阵的简单乘法(因为简单性用 1 填充)。我的问题是,当我运行脚本时出现此错误:ValueError: Dimensions must be equal, but are 4 and 450 for 'mul' (op: 'Mul') with input shapes: [450,4], [?,450].也许是因为我没有很好地提取输出层的值model.layers[2].output。那么我怎样才能使用 Keras 正确地做到这一点呢?
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

我认为你犯了两个严重错误:

  1. 不要传递 .compile 中丢失的参数 keras 足够聪明:

     model.compile(loss=custom_loss, optimizer='adam', metrics=["accuracy"])
  2. 如果您想对最后一层应用一些乘法,然后为此创建一个自定义层,请不要在损失函数内执行此操作;损失函数的作用只是找出预测值与真实值的差距


查看完整回答
反对 回复 2023-10-11
  • 1 回答
  • 0 关注
  • 55 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信