数据集和神经网络共同进步之代码之路

如下代码的不断调整可使得神经网络和数据集共同进步

在这里插入图片描述5分类成功分成了7分类,也就是说模型的能力将不属于该类的分出去l
但是人们还是利用模型将这些图片强行的5分类,那么一定地不准确的

也就是说本来这个图片既不是0分类和1分类,但是人们训练好模型后
识别出来只有5个结果,自然就只有5个结果,虽然这个图片哪个都不是但是还是会被认为是5个类别的一个,也就是说模型没有错而是,你强行的将其范围分类方位给缩小了也就是说你提供的数据标注,只是你所想到的那几类,但是模型完全可以将你的这种标注的所有分类都找出来
但是如果你没有可视化的话,你却不知道还有几类你根本没有想到
但是模型想到l,
所以说,模型是真的能分开,而是人类的意愿导致了模型的错误,
所以接下来将纠正这样的错误,采取模型和数据集合共同进步的方式
来解决大量的标注时间和模型达不到人类想要的结果

上面总结一句话,数据集中有一些是我们不需要的类的数据
下面将其剔除

如下图是训练数据网络能让图片分类的真实分布可以看到这个数据集应该标注为7类
而不是5类
所以,将7类的分割线上的任意两个点的坐标带入我的数据集矫正类别方法中,将数据级分为7类,去除我们不想要的类别,继续使用新标注的数据级或者说使用去除杂类的数据集合
在这里插入图片描述放入自己的图片到项目中,更改readmist中的数据处理代码
生成图片标签和路径的txt文件
首先执行代码的train
训练后执行readminst中的数据人工分类cls_data()
会得到如图类似的分类在这里插入图片描述
在使用鼠标在空白处选取两个点作为分割线(顺时针或者反之,分割线与分割线要挨着),
这样的格式

[3.35,-6.27,10.72,-22.7,8.56,-2.69,21.89,-3.40,9.37,2.08,22.34,4.95,7.75,6.38,17.57,15.95,6.12,9.25,12.28,19.05,-1.25,7.34,-8.1,21.92,-3.15,-5.79,-9.0,-17.15]

记录完后关闭图像,
将上面的数据输入到控制台
回车后就会生成,一个json文件,文件中已经将图片的地址按照上面的分割线分别存在列表中,最后只需要自己将路径读取出来再写一个
图片分别存放在相应的文件中即可完成,人工分类

代码在
https://download.csdn.net/download/weixin_32759777/12328521

可以使用如下代码进行人工分割

def get_path_and_dir(path):
    with open(path,"r") as f:
        data=json.load(f)
    for i ,one_path_list in enumerate(data["new_path_data"]):
        makedirs("image"+str(i))
        for one_path in one_path_list:
            with open(one_path,"rb") as f:
                data=f.read()
            with open("image"+str(i)+"/"+one_path.split("/")[-1],"wb") as f:
                f.write(data)

if __name__ == '__main__':
    # cls_data()
    get_path_and_dir("/home/chenyang/PycharmProjects/arc_face/new_data_path.json")

在这里插入图片描述分类后发现图片不是按照分割线分开的而是按照上图这样分开的
检查后发现图片每个文件中都前面的都一样,也就是说我们的cls_data()
写的有问题
在这里插入图片描述
问题出现的原因就是所有的图片都会小于AB两条线

所以所有的造成了混淆看上去就像同心圆
实际的同心圆应该如下图
所示
在这里插入图片描述
所以重写
cls_data()

在这里插入图片描述基本就是分为四种情况,按照上图的方向

c_x_0起点分割线上的外点x减内点x
c_x_1终点分割线上的外点x减内点x
x_0_1 两个分割线焦点x
带入x值到起点分割线y的值real_0
带入x值到终点分割线y的值real_1
y实际值

c_x_0 >x_0_1
c_x_1 >x_0_1
y<real_1
y>real_0

c_x_1 <x_0_1 
 y>real_1
 y>real_0

c_x_0 <x_0_1
c_x_1 >x_0_1
y<real_1
y<real_0

c_x_1 <x_0_1 
y>real_1
y<real_0

代码如下


def cls_data():
    data=dis_data()
    draw_json(data[0],data[1])
    print("请在图中输入分割线的坐标(线上两个点坐标共计四个值),保留两位小数")
    print("输入的线要按照分割的顺序输入")
    line_data=json.loads(input("请按照说明输入数据这样的格式[1,2,3,4,5,65]"))
    line_data=numpy.array(line_data).reshape(-1,4).tolist()
    k_b_list=[]
    cls_index_path=[]
    for xy in line_data:
        k_b = y_kx_b(xy)
        cls_index_path.append([])
        k_b_list.append(k_b)
    k_b_list.append(k_b_list[0])
    cls_index_path.append([])
    index_x=-1
    set_path=[]
    for x,y in zip(data[0],data[1]):
        try:
            index_x+=1
            k_b_index=0
            for _ in range(len(k_b_list)):
                k_b_index+=1
                real_0=k_b_list[k_b_index-1][0]*x+k_b_list[k_b_index-1][1]
                real_1=k_b_list[k_b_index][0]*x+k_b_list[k_b_index][1]
                c_x_0=k_b_list[k_b_index-1][2]
                c_x_1=k_b_list[k_b_index][2]
                x_0_1=(k_b_list[k_b_index][1]-k_b_list[k_b_index-1][1])/(k_b_list[k_b_index-1][0]-k_b_list[k_b_index][0])

                # c_x_0大于x_0_1的y>real_0否则y<real_0
                # 当c_x_0 >x_0_1 ,c_x_1 >x_0_1的y<real_1  c_x_1 <x_0_1 y>real_1
                # 当c_x_0 <x_0_1 ,c_x_1 >x_0_1的y<real_1  c_x_1 <x_0_1 y>real_1

                if c_x_0 >x_0_1:
                    if c_x_1 >x_0_1:
                        if y>real_0 and y<real_1:
                            if data[2][data[0].tolist().index(x)] in set_path:
                                continue
                            else:
                                set_path.append(data[2][data[0].tolist().index(x)])
                                cls_index_path[k_b_index].append(data[2][data[0].tolist().index(x)])
                    else:
                        if y>real_0 and y>real_1:
                            if data[2][data[0].tolist().index(x)] in set_path:
                                continue
                            else:
                                set_path.append(data[2][data[0].tolist().index(x)])
                                cls_index_path[k_b_index].append(data[2][data[0].tolist().index(x)])

                else:
                    if c_x_1 > x_0_1:

                        if y<real_0 and y<real_1:
                            if data[2][data[0].tolist().index(x)] in set_path:
                                continue
                            else:
                                set_path.append(data[2][data[0].tolist().index(x)])
                                cls_index_path[k_b_index].append(data[2][data[0].tolist().index(x)])
                    else:
                        if y<real_0 and y>real_1:
                            if data[2][data[0].tolist().index(x)] in set_path:
                                continue
                            else:
                                set_path.append(data[2][data[0].tolist().index(x)])
                                cls_index_path[k_b_index].append(data[2][data[0].tolist().index(x)])

            print(index_x)
        except:
            pass
    with open("new_data_path.json", "w", encoding="utf-8") as f:
        json.dump({"new_path_data":cls_index_path}, f, ensure_ascii=False)
    # q=[-4.70, -6.42, -15.51, -27.40,1.92, -2.72,7,14,2.21, 3.45,8.1, 15.37,-1.87, 3.86,-7.82, 17.64,-6.75, 7.35,-11.03,12.90,-9.57, 4.88,-19.60, 7.14,-8.40, -1.07,-21.84, -1.28]
    #将坐标
    q=[3.35,-6.27,10.72,-22.7,8.56,-2.69,21.89,-3.40,9.37,2.08,22.34,4.95,7.75,6.38,17.57,15.95,6.12,9.25,12.28,19.05,-1.25,7.34,-8.1,21.92,-3.15,-5.79,-9.0,-17.15,-3.42,-9.62,-9.18,-28]


发布了285 篇原创文章 · 获赞 89 · 访问量 248万+

猜你喜欢

转载自blog.csdn.net/weixin_32759777/article/details/105380273
今日推荐