繁体   English   中英

TensorFlow 中 CNN 的样本权重

[英]Sample weighting for CNN in TensorFlow

我有一个在 Tensorflow 中实现的 CNN,改编自教程: CNN with Estimators

摘自 data_input_fn:

dataset = dataset.batch(batch_size)  
iterator = dataset.make_one_shot_iterator()
features, labels = iterator.get_next()
return features, labels

摘自model_fn:

loss = tf.losses.softmax_cross_entropy(onehot_labels=labels, logits=logits)
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1)
train_op = optimizer.minimize(  loss=loss)

我正在使用tf.estimator.Estimator并在调用 train 函数时提供 steps = 10000 。 如何在训练期间为数据集中的所有样本(大约 300 万个样本)提供权重? 我的理解是所有样本在第一个模型的训练期间都具有相等的权重 (1/N),并用于计算加权损失。 然后,根据计算出的损失值,在下一个模型的训练期间应该修改、保存和重新加载权重。 是否应该从 csv 文件中提供权重,因为原始 TF 记录文件不包含权重,还是有更好的方法来做到这一点? 另外,是否有公认的函数可以根据损失值修改权重?

可以在 tensorflow 中使用样本加权。 几乎每个损失函数都采用“权重”参数,如果您传递正确形状的张量,则将使用该参数对样本进行加权。

AdaBoost 通常不与神经网络一起使用。 训练它们的费用使集成方法的吸引力降低。 因此,如果这就是您想要做的,您可能必须自己实现它。

如果您的模型是二元分类器,您可以为 tf.nn.weighted_cross_entropy_with_logits 提供一个类权重。

每个样本没有权重,但权重是针对输入向量 + 偏差的。 因此,接收大小为 n 的向量的感知器(或一个神经元)将具有 n 个权重 + 1 个偏差。 并且您不传递权重(直到它是您用于预测的预训练模型),您初始化它们并让模型训练权重。 模型只不过是模型架构 + 权重

单个神经元的权重

from keras.layers import Input, Dense
from keras.models import Model

model = Sequential()
model.add(Dense(1, input_dim=3))

print (model.summary())

_________________________________________________________________ Layer (type) Output Shape Param # ______________________________________________________________ dense_11 (Dense) (None, 1) 4 ________________________________________________________________ Total params: 4 Trainable params: 4 Non-trainable params: 0 _________________________________________________________________

正如您在模型定义中看到的那样,它是一个输入(X)大小为 3 的单个神经元(没有非线性激活)。神经元每个特征有一个权重 + 1 个偏置 = 3。它所做的只是np.dot(W, X) + b 我们从随机权重和传播算法开始,学习适当的权重。

学习权重后,我们将权重与模型架构一起存储,稍后将其用于对未知数据的预测。

卷积层中的权重

model = Sequential()
model.add(Conv2D(1, kernel_size=3, activation='relu', input_shape=(10,10,1)))
print (model.summary())

_________________________________________________________________ Layer (type) Output Shape Param # ______________________________________________________________ conv2d_4 (Conv2D) (None, 8, 8, 1) 10 ________________________________________________________________ Total params: 10 Trainable params: 10 Non-trainable params: 0 _________________________________________________________________

内核大小为 3,因此该层中的权重数为 3*3 + 1 偏差 = 10

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM