com.fasterxml.jackson.databind.JsonMappingException

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of com.sn.cloud.bill.srvbill.vo.GenOrderParam out of START_ARRAY token

问题:说无法序列化你的这个包下面的实体 就是当你的前台传递过来的1个id这是没问题实体可以接收 ,当你进行多选操作的时候就出出现上述问题

解决:找你你前台对应的接口访问的是那个方法看看你的操作是多选还是单选如果是单选@requestBoby 用一个对象接收是没问题 ,如果是多选操作此时你应看看你对应的方法是一个实体还是一个集合 如果是一个实体就改成一个集合

### 实现基于样本动态变化权重的自定义加权 MSE 损失函数Keras 中实现一个基于样本动态变化权重的自定义加权均方误差(Mean Squared Error, MSE)损失函数,可以通过传递额外的权重张量来完成。具体来说,可以利用 `tf.keras.backend` 提供的功能构建自定义损失函数。 以下是详细的实现方法: #### 自定义加权 MSE 损失函数的核心逻辑 为了支持动态权重,可以在计算 MSE 时引入一个权重向量 \( w \),该向量与每个样本对应,并乘以对应的平方误差项。最终通过求和并取平均值得到总损失[^1]。 ```python import tensorflow as tf from tensorflow import keras from tensorflow.keras import backend as K def weighted_mse(y_true, y_pred, sample_weights): """ 计算带权重的均方误差 (Weighted Mean Squared Error) 参数: y_true: 真实值 Tensor y_pred: 预测值 Tensor sample_weights: 权重 Tensor,形状应与 y_true 和 y_pred 相同 返回: 加权后的均方误差 """ squared_error = K.square(y_true - y_pred) # 平方误差 weighted_squared_error = squared_error * sample_weights # 应用权重 loss = K.mean(weighted_squared_error, axis=-1) # 对所有样本取平均 return loss ``` #### 将权重作为附加输入传入模型 由于 Keras 默认不支持直接将权重作为参数传递给损失函数,因此需要借助 **Lambda 层** 或者 **函数式 API** 构建模型,以便显式地处理权重输入[^2]。 以下是一个完整的例子,展示如何创建一个多输入模型并将权重应用于损失函数: ```python # 定义输入层 input_features = keras.layers.Input(shape=(None,), name="features") # 特征输入 input_targets = keras.layers.Input(shape=(None,), name="targets") # 真实标签输入 input_weights = keras.layers.Input(shape=(None,), name="weights") # 样本权重输入 # 创建简单网络结构 x = keras.layers.Dense(64, activation='relu')(input_features) predictions = keras.layers.Dense(1)(x) # 使用 Lambda封装加权 MSE 损失 weighted_loss = keras.layers.Lambda( lambda inputs: weighted_mse(inputs[0], inputs[1], inputs[2]), output_shape=lambda shapes: shapes[:1], name="weighted_loss" )([input_targets, predictions, input_weights]) # 构建模型 model = keras.models.Model( inputs=[input_features, input_targets, input_weights], outputs=predictions, ) # 编译模型时不指定内置损失函数 model.compile(optimizer=keras.optimizers.Adam(), loss=None) # 打印模型结构 model.summary() ``` #### 数据准备与训练过程 为了让模型能够正常运行,数据也需要相应调整为三部分:特征、目标值以及权重。例如: ```python # 假设我们有一些随机生成的数据用于演示 import numpy as np num_samples = 1000 feature_dim = 10 # 随机生成特征矩阵 X_train = np.random.rand(num_samples, feature_dim).astype(np.float32) # 随机生成目标值 y_train = np.random.rand(num_samples, 1).astype(np.float32) # 动态生成权重(可以根据业务需求设计) sample_weights = np.ones_like(y_train) # 初始权重全为1 for i in range(len(sample_weights)): if y_train[i][0] > 0.5: # 如果目标值大于某个阈值,则增加其权重 sample_weights[i] *= 3.0 # 开始训练 history = model.fit( {"features": X_train, "targets": y_train, "weights": sample_weights}, epochs=10, batch_size=32, verbose=1 ) ``` --- ### 总结 以上展示了如何在 Keras 中实现一个基于样本动态变化权重的自定义加权 MSE 损失函数。核心在于通过扩展模型输入的方式引入权重张量,并将其融入损失计算中[^3]。这种方法不仅灵活,还能满足多种复杂场景下的需求[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值