Python TensorFlow中CNN的样本加权
我在Tensorflow中实现了一个CNN,根据教程改编: 摘自数据输入fn:Python TensorFlow中CNN的样本加权,python,tensorflow,machine-learning,Python,Tensorflow,Machine Learning,我在Tensorflow中实现了一个CNN,根据教程改编: 摘自数据输入fn: dataset = dataset.batch(batch_size) iterator = dataset.make_one_shot_iterator() features, labels = iterator.get_next() return features, labels 摘自模型_fn: loss = tf.losses.softmax_cross_entropy(onehot_labels=l
dataset = dataset.batch(batch_size)
iterator = dataset.make_one_shot_iterator()
features, labels = iterator.get_next()
return features, labels
摘自模型_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函数时提供步骤=10000。在训练期间,我如何为数据集中约3M个样本提供权重?我的理解是,在第一个模型的训练期间,所有样本的权重均为1/N,用于计算加权损失。然后,根据计算出的损失值,应在下一个模型的训练期间修改、保存和重新加载权重。是否应该从csv文件中提供权重,因为原始TF记录文件不包含权重,或者是否有更好的方法?此外,是否有一个可接受的函数根据损失值修改权重?每个样本没有权重,但权重用于输入向量+偏差。因此,一个感知器或一个接受大小为n的向量的神经元将有n个权重+1个偏差。你不会传递权重,直到它是一个预先训练好的模型,你用它来预测,你初始化它们,让模型训练权重。模型只不过是模型架构+权重 单个神经元中的权重 _________________________________________________________________ 图层类型输出形状参数______________________________________________________________ 稠密\u 11稠密无,1 4________________________________________________________________ 总参数:4 可培训参数:4 不可训练参数:0 _________________________________________________________________ 正如您在模型定义中所看到的,它是一个没有非线性激活的单个神经元,输入大小为3。神经元每个特征有一个权重+1偏差=3。它所做的就是np.dotW,X+b。我们从随机权重和学习适当权重的传播算法开始 一旦学习了权重,我们将权重与模型体系结构一起存储,并在以后使用它对看不见的数据进行预测 卷积层中的权重 _________________________________________________________________ 图层类型输出形状参数______________________________________________________________ conv2d_4 conv2d无,8,8,110________________________________________________________________ 总参数:10 可培训参数:10 不可训练参数:0 _________________________________________________________________
内核大小为3,因此该层中的权重数为3*3+1 bias=10可以在tensorflow中使用样本权重。几乎每个损失函数都有一个权重参数,如果传递一个正确形状的张量,该参数将用于对样本进行权重计算。AdaBoost通常不用于神经网络。训练它们的费用使得集成方法不那么吸引人。因此,如果这是您想要做的,您可能必须自己实现它
如果您的模型是一个二元分类器,您可以使用逻辑为tf.nn.weighted\u cross\u entropy\u提供类权重。问题不在于模型中的神经元权重。它是关于为示例/示例提供权重的,用于adaBoost实现引导。作为参考,添加此项后,您是否有任何特定信息-例如如何在第一次迭代训练后根据加权损失重新计算权重?它变得更加棘手,因为大约有300万个样本以10000个步骤批量传递给训练函数,用于训练模型。
from keras.layers import Input, Dense
from keras.models import Model
model = Sequential()
model.add(Dense(1, input_dim=3))
print (model.summary())
model = Sequential()
model.add(Conv2D(1, kernel_size=3, activation='relu', input_shape=(10,10,1)))
print (model.summary())