Paddle Resnet50网络微调更改数据集出现错误

cig3rfwq  于 2021-11-30  发布在  Java
关注(0)|答案(1)|浏览(262)

为使您的问题得到快速解决,在建立Issue前,请您先通过如下方式搜索是否有相似问题:【搜索issue关键字】【使用labels筛选】【官方文档】

建立issue时,为快速解决问题,请您根据使用情况给出如下信息:

  • 标题:简洁、精准描述您的问题,例如“ssd 模型前置lstm报错  ”
  • 版本、环境信息:

1)PaddlePaddle版本:paddlepaddle-gpu 1.8.0.post107
3)GPU:gtx950m ,cuda 10.2, V10.2.89
4)系统环境:py3.7+win10 家庭普通版
训练信息
1)单机,单卡
2)6169m
问题描述:微调别人已经训练好的网络,自己已经将别人网络调通。但是载入自己数据集时出现问题。别人原先数据集是jpg图像,彩色图像,维度虽然不固定,但是以100x100x3 uint8,256x256x3 uint8,396x236x3 uint8为主,自己数据集来源于书中所截铭文图片,格式为png,经过调整变为jpg,以黑白为主,格式为128x128x3 uint8,128x128x3 uint8,182x135x3 uint8等,运行模块时出现以下错误,请问该如何修改数据集,使其能够运行,或者说修改源码,但是源码不知道修改哪里
实验时将8个数据集都换成一个文字(“皇”)进行实验时,该文字格式是128x128x3 uint8,可以顺利训练模型,但是我将8个数据集中一个数据进行替换,格式依然是128x128x3 uint8,却显示错误,数据都是经过归一化处理的,现在不知道对于出错误数据应该怎么处理?请大佬看看数据集应该怎么处理才能8个分类全部运行。需要全部归一化为多少?还是说必须彩色图片?
源码以及测试部分数据集上传附件,请大家看看如何解决,谢谢大家!
出错代码片段

base_reader = BaseReader()

# 先来看看在 PaddlePaddle 里面这个 reader 怎么用,我们以验证数据作为例子

base_test_reader = base_reader.create_test_reader(test_files)

for data in base_test_reader():
    print('image-shape:', data[0].shape)
    print('label:', data[1])
    break
print()

base_test_reader = paddle.batch(base_test_reader, batch_size=batch_size)

for data in base_test_reader():
    print('data-type:', type(data))
    print('data-length:', len(data))
    print('image-shape:', data[0][0].shape)
    print('label:', data[0][1])
    break
print()

# 使用 numpy 将列表变成批数据的方法如下:

# 使用 np.stack(列表)

# 这里先将列表中的 image 部分取出变成一个列表,然后再 stack

images = [data[i][0] for i in range(batch_size)]
images = np.stack(images).astype(np.float32)
print('images-shape:', images.shape)
print('images-type:', images.dtype)

# label 部分同理

labels = [data[i][1] for i in range(batch_size)]
labels = np.stack(labels).reshape((batch_size, 1)).astype(np.int64)
print('labels-shape:', labels.shape)

print('labels-type:', labels.dtype)
print('labels:')
print(labels)

报错显示:

image-shape: (3, 224, 224)
label: 6

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-15-da2d0a702f98> in <module>
     12 base_test_reader = paddle.batch(base_test_reader, batch_size=batch_size)
     13 
---> 14 for data in base_test_reader():
     15     print('data-type:', type(data))
     16     print('data-length:', len(data))

E:\Program Files\Anaconda3\envs\paddle_env python=3.7\lib\site-packages\paddle\batch.py in batch_reader()
     56         r = reader()
     57         b = []
---> 58         for instance in r:
     59             b.append(instance)
     60             if len(b) == batch_size:

<ipython-input-7-37affc3908b2> in _reader()
    105 
    106                 image = np.array(image).astype('float32').transpose((2, 0, 1)) / 255
--> 107                 image = normalize_image(image)
    108 
    109                 label = label_class[labelname]

<ipython-input-2-11a2288187a8> in normalize_image(image)
     12 # 正则化一张图片
     13 def normalize_image(image):
---> 14     image = (image - mean) / std
     15     return image
     16 

ValueError: operands could not be broadcast together with shapes (4,224,224) (3,1,1)

相关问题