Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TensorFlow中CNN的样本加权_Python_Tensorflow_Machine Learning - Fatal编程技术网

Python TensorFlow中CNN的样本加权

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

我在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=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())