精华内容
下载资源
问答
  • tf.keras.Model.fit()的参数class_weight,对训练时的损失函数进行加权,用于告诉模型更需要关注某些代表性不足的类别的样本

    问题描述

    调用 tf.keras.Model.fit() 时可以带入参数 class_weight,对训练时的损失函数进行加权,用于告诉模型更需要关注某些代表性不足的类别的样本

    如数据集 flower_photos.tgz

    数据集是不平衡的,即每个类的样本数不同(广义来说是平衡的,比例偏差不大)

    分类图片数
    daisy633
    dandelion898
    roses641
    sunflowers699
    tulips799




    解决方案

    统计不同分类的图片数量 tf.keras.preprocessing.image.ImageDataGenerator.flow_from_directory()

    import numpy as np
    import tensorflow as tf
    
    directory = 'flower_photos'
    datagen = tf.keras.preprocessing.image.ImageDataGenerator()
    data = datagen.flow_from_directory(directory)
    unique = np.unique(data.classes, return_counts=True)
    labels_dict = dict(zip(unique[0], unique[1]))
    print(labels_dict)
    # Found 3670 images belonging to 5 classes.
    # {0: 633, 1: 898, 2: 641, 3: 699, 4: 799}
    

    统计不同分类的图片数量 tf.keras.preprocessing.image_dataset_from_directory() (遍历 dataset 时耗时很久,暂时找不到解决方案)

    import numpy as np
    import tensorflow as tf
    
    directory = 'flower_photos'
    dataset = tf.keras.preprocessing.image_dataset_from_directory(directory)
    classes = np.concatenate([y for x, y in dataset], axis=0)
    unique = np.unique(classes, return_counts=True)
    labels_dict = dict(zip(unique[0], unique[1]))
    print(labels_dict)
    # Found 3670 files belonging to 5 classes.
    # {0: 633, 1: 898, 2: 641, 3: 699, 4: 799}
    

    计算不同类别权重

    import math
    
    
    def get_class_weight(labels_dict):
        """计算数据集不同类别的占比权重
    
        >>> get_class_weight({0: 633, 1: 898, 2: 641, 3: 699, 4: 799})
        {0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0, 4: 1.0}
        >>> get_class_weight({0: 5, 1: 78, 2: 2814, 3: 7914})
        {0: 7.366950709511269, 1: 4.619679795255778, 2: 1.034026384271035, 3: 1.0}
        """
        total = sum(labels_dict.values())
        max_num = max(labels_dict.values())
        mu = 1.0 / (total / max_num)
        class_weight = dict()
        for key, value in labels_dict.items():
            score = math.log(mu * total / float(value))
            class_weight[key] = score if score > 1.0 else 1.0
        return class_weight
    
    
    labels_dict = {0: 633, 1: 898, 2: 641, 3: 699, 4: 799}  # 平衡数据集
    print(get_class_weight(labels_dict))
    # {0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0, 4: 1.0}
    labels_dict = {0: 5, 1: 78, 2: 2814, 3: 7914}  # 不平衡数据集
    print(get_class_weight(labels_dict))
    # {0: 1.0, 1: 3.749820767859636, 2: 1.0, 3: 3.749820767859636, 4: 1.0, 5: 2.5931008483842453, 6: 1.0, 7: 2.5931008483842453}
    




    参考文献

    1. How to set class weights for imbalanced classes in Keras?
    2. Get unique values in a list of numpy arrays
    3. NumPy: Count the frequency of unique values in numpy array
    展开全文
  • 您必须覆盖onMeasure方法设置与高度相同的高度.请看这个问题:Simple way to do dynamic but square layout这是我提出的完整解决方案:SquareLinearLayout.java:public class SquareLinearLayout extends ...

    您必须覆盖onMeasure方法设置与高度相同的高度.请看这个问题:

    Simple way to do dynamic but square layout

    这是我提出的完整解决方案:

    SquareLinearLayout.java:

    public class SquareLinearLayout extends LinearLayout {

    public SquareLinearLayout(Context context) {

    super(context);

    }

    public SquareLinearLayout(Context context, AttributeSet attrs) {

    super(context, attrs);

    }

    public SquareLinearLayout(Context context, AttributeSet attrs, int defStyle) {

    super(context, attrs, defStyle);

    }

    @Override

    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    int width = MeasureSpec.getSize(widthMeasureSpec);

    int height = MeasureSpec.getSize(heightMeasureSpec);

    int widthDesc = MeasureSpec.getMode(widthMeasureSpec);

    int heightDesc = MeasureSpec.getMode(heightMeasureSpec);

    int size = 0;

    if (widthDesc == MeasureSpec.UNSPECIFIED

    && heightDesc == MeasureSpec.UNSPECIFIED) {

    size = getContext().getResources().getDimensionPixelSize(R.dimen.default_size); // Use your own default size, for example 125dp

    } else if ((widthDesc == MeasureSpec.UNSPECIFIED || heightDesc == MeasureSpec.UNSPECIFIED)

    && !(widthDesc == MeasureSpec.UNSPECIFIED && heightDesc == MeasureSpec.UNSPECIFIED)) {

    //Only one of the dimensions has been specified so we choose the dimension that has a value (in the case of unspecified, the value assigned is 0)

    size = width > height ? width : height;

    } else {

    //In all other cases both dimensions have been specified so we choose the smaller of the two

    size = width > height ? height : width;

    }

    setMeasuredDimension(size, size);

    }

    }

    activity_my.xml:

    xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/listview"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    android:paddingBottom="@dimen/activity_vertical_margin"

    tools:listitem="@layout/item"

    tools:context=".MyActivity">

    item.xml:

    android:orientation="horizontal" android:layout_width="match_parent"

    android:layout_height="match_parent">

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:layout_weight="1"

    android:background="@android:color/holo_blue_bright">

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:gravity="center"

    android:text="Test 1"

    android:textSize="24sp" />

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:layout_weight="1"

    android:background="@android:color/holo_green_light">

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:gravity="center"

    android:text="Test 2"

    android:textSize="24sp" />

    MyActivity.java:

    public class MyActivity extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_my);

    ListView listView = (ListView) findViewById(R.id.listview);

    listView.setAdapter(new BaseAdapter() {

    private LayoutInflater mInflater = LayoutInflater.from(MyActivity.this);

    @Override

    public int getCount() {

    return 100;

    }

    @Override

    public Object getItem(int position) {

    return null;

    }

    @Override

    public long getItemId(int position) {

    return 0;

    }

    @Override

    public View getView(int position, View convertView, ViewGroup parent) {

    if (convertView == null)

    convertView = mInflater.inflate(R.layout.item, parent, false);

    return convertView;

    }

    });

    }

    }

    展开全文
  • pytorch中CrossEntropyLoss中weight的问题

    千次阅读 2021-05-21 11:20:12
    pytorch中CrossEntropyLoss中weight的问题 由于研究的需要,最近在做一个分类器,但类别数量相差很大。 在查看nn.CrossEntropyLoss()的官方文档时看到这么一句 感觉有救了,遂想应用到我自己的网络中,但是weight是...

    pytorch中CrossEntropyLoss中weight的问题

    由于研究的需要,最近在做一个分类器,但类别数量相差很大。
    在查看nn.CrossEntropyLoss()的官方文档时看到这么一句
    在这里插入图片描述
    感觉有救了,遂想应用到我自己的网络中,但是weight是自己初始化的。怎么初始化又有问题了。在看focal loss的时候有点印象,样本多的类别权重应该小,但是有没有一个公式啊?
    在中文互联网是找了很久,没有太多的帖子,相关问题的帖子文章很少,于是就去谷歌了。
    在以下两篇帖子找到了答案。
    先放链接
    https://discuss.pytorch.org/t/weights-in-weighted-loss-nn-crossentropyloss/69514
    帖子1
    https://datascience.stackexchange.com/questions/48369/what-loss-function-to-use-for-imbalanced-classes-using-pytorch
    帖子2
    第一篇帖子中有两个公式,居然不一样。我就麻烦了,谁对谁错,在第二篇帖子中找到一个实例,分类样本有三类:c1(900),c1(15000),c1(800).也给了一个最后的权重。
    在这里插入图片描述
    第一篇帖子中有个公式可以计算出第二篇帖子中的权重,我权且相信这种权重的计算公式是对的。
    原公式是这样的:

    weights = torch.tensor([90015000800], dtype=torch.float32)
    weights = weights / weights.sum()
    weights = 1.0 / weights
    weights = weights / weights.sum()
    print(weights)
    

    最后的结果为:

    tensor([0.4577, 0.0275, 0.5149])
    

    于第二篇帖子结果相同,但是他这公式一言难尽,不就是样本倒数的比值吗?搞得这嘛绕,这是我的代码`

    import torch
    weights = torch.tensor([900,15000,800], dtype=torch.float32)
    weights = [max(weights)/x for x in weights]
    print(weights)
    

    结果一样。

    本人弱鸡,写帖子主要是为了和大家分享一些学习过程中遇到的,很难在中文互联网在找到的问题。如有错误,欢迎指正。

    展开全文
  • 假设:LinearLayout为android:orientation="horizontal",LinearLayout中包含三个控件layout_weight属性值分别为1、2、2第一种:每个控件的宽度属性都为android:layout_width="0dp",那么额外的空间为(手机的宽度...

    假设:

    LinearLayout为android:orientation="horizontal",

    LinearLayout中包含三个控件

    layout_weight属性值分别为1、2、2

    第一种:

    每个控件的宽度属性都为android:layout_width="0dp",

    那么额外的空间为(手机的宽度假设为X)X-0-0-0=X,那么根据sdk上所述:

    第一个控件的宽度为 0+(1/(1+2+2))X=X/5

    第二个控件的宽度为 0+(2/(1+2+2))X=2X/5

    第三个控件的宽度为 0+(2/(1+2+2))*X=2X/5

    第二种:

    每个控件的宽度属性都为android:layout_width="match_parent",

    那么额外的空间就是X-X-X-X=-2X

    第一个控件的宽度为 X+(1/(1+2+2))(-2X)=3X/5

    第二个控件的宽度为 X+(2/(1+2+2))(-2X)=X/5

    第三个控件的宽度为 X+(2/(1+2+2))(-2X)=X/5

    第三种:

    其中第一个控件宽度属性为android:layout_width="match_parent",

    其他两个控件宽度为android:layout_width="0dp",额外的空间为X-X-0-0=0

    第一个控件的宽度为 X+(1/(1+2+2))0=X

    第二个控件的宽度为 0+(2/(1+2+2))0=0

    第三个控件的宽度为 0+(2/(1+2+2))*0=0

    最终结论:layout_weight的公式

    控件的宽度/高度 = 控件的width/height值+(该控件的weight值/所有控件的weight的和)×额外的空间

    额外的空间=手机的宽度/高度-所有控件的宽度/高度

    注:如果属性为android:layout_width="wrap_content" 则计算时,总宽/高要减去控件本身占据的宽/高

    展开全文
  • Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).For example, the 32-bit integer ’11' has binary representation ...
  • 交叉熵损失函数 torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=- 100, reduce=None, reduction='elementwise_mean') ...weight计算方法经常使用median frequency balanci
  • 内核版本:linux-4.4.249函数签名:__update_inv_weight(struct load_weight *lw)文件位置:./kernel/sched/fair.c功能&原理解析:(1)该函数的作用是,如果lw->inv_weight不为0,不作任何修改函数直接返回;...
  • 说明:代码都是基于原文章,本文只对其中计算方面的理解稍加分析以便于理解!!! 写这段简单的代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=...
  • 一个Layout中,放置几个TextView,然后对每个TextView设置不同的宽度比例,设置权重属性layout_weight就是我们最常用的一个功能。弄明白权重的计算,有助于我们更精准的布局。 假设有如下布局,我们考虑子控件的...
  • android中对weight的学习可以说是必须的,如果UI布局仅仅使用dp与sp等等,会让布局显得极度不灵活,毕竟各个手机屏幕大小不同,更别说是还有ipad之类的了,所以也是同做本人近期做的一个小UI来分享一下weight的使用...
  • UNet weight map 代码实现

    2021-11-02 16:12:25
    首先,论文中给出的weight map的计算公式为: 其中为“weight map to balance the class frequencies”,为与最近的细胞边缘的距离,为与第二近的细胞边缘的距离,和为参数,一般取10和5。 引入要用的包: ...
  • Weight for weight C#实现

    2021-02-07 21:51:57
    大意是给定了一个字符串,字符串由一些数字组成,需要按照一个权重来对这些数字排序,权重的计算方式就是每一位数字加一起的和。 我的思路是利用List的Sort()函数来进行排序,因此需要实现IComparable接口。 所以...
  • 【背景】之前学习Android的UI期间,更深入的了解了TextView的weight的含义:但是却没有实际经验和心得。后来,折腾Android的UI期间,用到了这个weight。整理如下:【利用TextView的weight实现LinearLayout中各个...
  • 一、计算参数量和FOPS代码 本人觉得下面这个代码出错率少,因为沾到.pb文件,有些时候你总是要出点错,比如说: AssertionError: output is not in graph 而且你去把节点打印出来后,把输出节点换上,还是错,...
  • #include <iostream> using namespace std; class car; class boat { public: ...weight = weight; } friend int getTotalWeight(boat &b,car &c); private: int weight.
  •  本文提出了一种权重的更新策略,每一个 step 的优化中维护两组权重,第一组称为 fast weight,就是常规优化器更新得到的权重,第二组称为 slow weight,是利用 fast weight 得到的权重。之所以称为 fast/slow,是...
  • rank_v2~rank_v29-15-107021786.first_rank_v2_pc_rank_v29&utm_term=+weight+nllloss&spm=1018.2226.3001.4187 weight:可选的,应该是一个tensor,里面的值对应类别的权重,如果样本不均衡的话,这个参数非常有用...
  • 以前一直没弄懂Layout_weight是什么意思,自己写代码测试也出来了不同的情况,最近看了一篇帖子感觉分析的很好,转贴出来学习下。布局文件是:出现的布局是:button1占了2/3,button2占了1/3。但是如果将布局文件中...
  • pytorch中.weight.data与.weight 查看两个方法的类型 .weight.data:得到的是一个Tensor的张量(向量) .weight:得到的是一个parameter的变量,可以计算梯度的 查看两个方法的值
  • linearLayout中包含有weight的child时,linearLayout会measure两次:设屏幕宽度为X第一次:button1 的measuredWidth为X, button2也为X (因为用了weight,所以linearLayout每次measure child时不考虑前一个已经占用的...
  • } 算法分析如下: 对位长为2的数计算比特1的个数: n n>>>1 比特1计数 n-(n>>>1) 00 00 00 01 00 01 10 01 01 11 01 10 这样,对位长为2的数进行如上计算后,2位数内存放的就是原来比特1的个数了。一个整数为32位,...
  • 实验六 继承

    2021-06-05 09:31:28
    (3) 定义主类,在主类中声明一个Box对象和一个子类BoxWeight对象,计算输出Box对象的体积,计算输出BoxWeight对象的体积和重量。 定义一个车的基类Vehicle,含有成员speed,weight。该类派生出自行车类Bicycle,...
  • 自定义平均: 默认情况下,torch.optim.swa_utils.AveragedModel计算参数的运行平均值,但也可以将自定义平均值函数与avg_fn参数一起使用。在以下示例中,ema_模型计算指数移动平均数。 >>> ema_avg = lambda ...
  • size mismatch for module.conv1.weight: copying a param with shape torch.Size([16, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([128, 128, 3, 3]). size mismatch for
  • I have an unweighted graph created with networkx for which I would like to calculate the weight of edges between nodes based on the count/frequency of an edge occurrence. An edge in my graph can occur...
  • 计算身体质量指数,我们需要两个条件重量(Weight)高度(Height)BMI可以使用以下公式计算-BMI =(重量)/(身高*身高)重量以千克为单位,高度以米为单位示例Input1-:weight=60.00Height=5.1Output-:BMIindexis:23.53...
  • python的scikit-learn包下有计算tf-idf的api,研究了下做个笔记1 安装scikit-learn包sudo pip install scikit-learn2 中文分词採用的jieba分词,安装jieba分词包sudo pip install jieba3 关于jieba分词的使用很easy...
  • ‘font-weight’属性

    2021-04-09 15:10:04
    字体粗细:‘font-weight’属性 名称: font-weight 取值: normal | bold | ...计算值: 详见描述 动画: - ‘font-weight’属性执行字体中字形的重量,这取决于黑度等级或笔划粗细。 其值的意义如下: 100至900 ...
  • 默认取均值 myloss = binary_ce_loss() print(myloss(input, target, weight=weight)) """ # myloss tensor(0.4621) """ pytorch官方的代码和自己实现的计算出的损失一致,再次说明binary_cross_entropy的weight权重...
  • 标准transformer中计算注意力的计算代价和DeLighT块分别为O(dmn2)和O(don2),其中dom。因此,DeLighT块将计算注意力的成本降低了dm/do的因子。在实验中,使用do=dm/2,因此与transformer架构相比,所需的乘法-加法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 171,226
精华内容 68,490
关键字:

weight计算