首页 > 其他分享 >TensorLayer出现数据形状转换错误

TensorLayer出现数据形状转换错误

时间:2022-09-05 09:58:41浏览次数:95  
标签:map 转换 img image TensorLayer 形状 train tf ds

参考链接:

TensorLayer/tutorial_cifar10_cnn_static.py at master · tensorlayer/TensorLayer (github.com)

1.错误部分

使用TensorLayer来进行CIFAR-10 数据集上的图像分类,直接运行源文件的时候出现了如下错误:

InvalidArgumentError: Input to reshape is a tensor with 128 values, but the requested shape has 1
	 [[{{node Reshape}}]]

出现错误部分的代码如下:

def _map_fn_train(img, target):
    # 1. Randomly crop a [height, width] section of the image.
    img = tf.image.random_crop(img, [24, 24, 3])
    # 2. Randomly flip the image horizontally.
    img = tf.image.random_flip_left_right(img)
    # 3. Randomly change brightness.
    img = tf.image.random_brightness(img, max_delta=63)
    # 4. Randomly change contrast.
    img = tf.image.random_contrast(img, lower=0.2, upper=1.8)
    # 5. Subtract off the mean and divide by the variance of the pixels.
    img = tf.image.per_image_standardization(img)
    target = tf.reshape(target, ())
    return img, target
    
# dataset API and augmentation
train_ds = tf.data.Dataset.from_generator(
    generator_train, output_types=(tf.float32, tf.int32)
)  # , output_shapes=((24, 24, 3), (1)))
# train_ds = train_ds.repeat(n_epoch)
train_ds = train_ds.shuffle(shuffle_buffer_size)
train_ds = train_ds.prefetch(buffer_size=4096)
train_ds = train_ds.batch(batch_size)
train_ds = train_ds.map(_map_fn_train, num_parallel_calls=multiprocessing.cpu_count())

2.具体分析

问题的具体描述是出现了数据形状转换错误,而通过排查可以确定问题就出现在map进行的数据转换上,其具体原因为train_ds在进行map转换时,首先进行了batch操作,将数据集转化为了小批量数据的格式,而map函数进行操作时的操作对象是单一的数据,因此数据格式出现了冲突,导致了该问题的发生。

3.解决办法

我们需要在进行batch前先进行map操作,完成转换后再进行小批量处理。

标签:map,转换,img,image,TensorLayer,形状,train,tf,ds
From: https://www.cnblogs.com/zuiyixin/p/16657009.html

相关文章

  • 数组和字符串的相互转换
      var arr = [1, 2, 3, 4];    var arr2 = arr;    var str = arr.toString(); // 将数组转换为字符串    console.log(str); // 1,2,......
  • 【SQL】将日期时间转换成年月日的日期形式
    【SQL】将日期时间转换成年月日的日期形式这段时间写力扣的SQL题,发现了各式各样的转换时间的方法,正好记录一下TO_CHAR(XXX,'YYYY-MM-DD')这个在Oracle应该是很常用的......
  • 进制转换
    1~32进制十进制转n进制循环写法#include<bits/stdc++.h>#include<algorithm>usingnamespacestd;voidf(longlongx,longlongn){stringt="0123456789ABCDE......
  • 9.3 字符串的常用操作_字符串的大小写转换操作方法
     '''字符串的大小写转换''''''转化后字符串会开辟新的储存空间'''s='hello,python's1='hello,Python'print('s的地址',id(s),'s1的地址',id(s1))a=s.upper()......
  • 类型转换
    类型转换由于Java是强类型语言,所以要进行有些运算的时候的,需要用到类型转换。运算中,不同类型的数据先转化为同一类型,然后进行运算。强制类型转换//强制转换(......
  • After Effects 教程,如何在 After Effects 中使用 VR 转换器?
    欢迎观看AfterEffects中文版教程,小编带大家学习AfterEffects的基本工具和使用技巧,了解如何在AE中使用VR转换器。在AfterEffects中,可以使用VR转换器效果快速......
  • Google库 来实现 按钮图片等控件的圆角形状 告别shape、各种 drawable
    直接上导入implementation'com.google.android.material:material:1.2.0'MaterialButton继承AppCompatButton,在原来Button的基础上做了一些扩展,如圆角、描边等......
  • 【三维重建】相机模型以及坐标转换
    理论内容:立体视觉入门指南(1):坐标系与相机参数代码出处练习作业世界坐标系到相机坐标系的转换W2C相机坐标系到世界坐标系的转换C2W相机坐标系到图像坐标系的转换C2I......
  • 证书转换
    证书转换1pem格式转jks格式证书转换命令:原因:Java无法读取pem格式的证书,Java自身的证书读取格式为keystore(JKS),所以需要将证书进行一个集成和转换步骤a)......
  • 将string类型数字保留两位小数,并转换成千分位的格式
    保留两位小数,并转换成千分位的格式将一个string类型的数字,保留两位小数,并转换成千分位的格式//返回保留两位小数的字符串privateStringsaveTwo(Stringstr){......