Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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 重写解析器函数以启用矢量化_Python_Tensorflow_Deep Learning_Vectorization - Fatal编程技术网

Python 重写解析器函数以启用矢量化

Python 重写解析器函数以启用矢量化,python,tensorflow,deep-learning,vectorization,Python,Tensorflow,Deep Learning,Vectorization,我正在使用TensorFlow数据集。为了从记录文件加载图像数据,我有一个函数parse\u tfr\u elem,它目前只加载一个示例 为了加快数据加载过程,我研究了其他问题,例如。他们建议将矢量化以批处理方式处理数据。就我而言,我还没有找到可能的转换 在我看来,关键点是设置张量的形状。如果不设置形状,我的网络将抛出一个错误 ValueError:层顺序的输入0与层不兼容:其秩未定义,但层需要定义的秩。 我正在寻找关于如何重写以下函数以处理批处理的建议: def parse_tfr_elem(

我正在使用TensorFlow数据集。为了从记录文件加载图像数据,我有一个函数
parse\u tfr\u elem
,它目前只加载一个示例

为了加快数据加载过程,我研究了其他问题,例如。他们建议将矢量化以批处理方式处理数据。就我而言,我还没有找到可能的转换

在我看来,关键点是设置张量的形状。如果不设置形状,我的网络将抛出一个错误

ValueError:层顺序的输入0与层不兼容:其秩未定义,但层需要定义的秩。

我正在寻找关于如何重写以下函数以处理批处理的建议:

def parse_tfr_elem(元素):
解析_dict={
“高度”:tf.io.FixedLenFeature([],tf.int64),
“宽度”:tf.io.FixedLenFeature([],tf.int64),
“标签”:tf.io.FixedLenFeature([],tf.int64),
“深度”:tf.io.FixedLenFeature([],tf.int64),
“image_raw”:tf.io.FixedLenFeature([],tf.string)
}
example_message=tf.io.parse_single_example(元素,parse_dict)#可以被parse_example替换
img_raw=示例_消息['image_raw']
高度=示例_消息['height']
宽度=示例_消息['width']
深度=示例_消息['depth']
label=示例_消息['label']
feature=tf.io.parse_tensor(img_raw,out_type=tf.uint8)#临界点1
特征=tf.重塑(特征,形状=[高度,宽度,深度])#临界点2
返回(特征、标签)
我无法解决的两个问题是对张量的解析
parse_tensor
和重塑(这将处理不同的批量大小,例如,形状将是
[None,h,w,d]

提前感谢你的帮助

下面列出了要使用的代码:


导入tensorflow作为tf
导入操作系统
将numpy作为np导入
将tensorflow_数据集作为TFD导入
自动调谐=tf.data.experimental.AUTOTUNE
ds=tfds.load('mnist',shuffle\u files=True,as\u supervised=True)
ds['test'].基数()
ds_splits=[“训练”,“测试”]
##写特征
定义字节功能(值):
“”“从字符串/字节返回字节列表。”“”
if isinstance(值,类型(tf.constant(0)):#if值是张量
value=value.numpy()#获取张量的值
返回tf.train.Feature(bytes\u list=tf.train.BytesList(value=[value]))
def_浮动功能(值):
“”“从浮点/双精度返回浮点列表。”“”
返回tf.train.Feature(float\u list=tf.train.FloatList(value=[value]))
def_int64_功能(值):
“”“从bool/enum/int/uint返回int64_列表。”“”
返回tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))
def序列化_数组(数组):
数组=tf.io.serialize\u张量(数组)
返回数组
对于ds_拆分中的d:
打印(“保存{}”。格式(d))
子集=ds[d]
filename=d+“.tfrecords”
writer=tf.io.TFRecordWriter(文件名)
计数=0
对于图像,在子集中添加标签:
#rand_arr=np.random.random(size=(28,28,1))将其用作图像的alt
#请参阅如何加载浮点(如果是,请在下面的parse_tensor中设置tf.float64)
资料={
‘高度’:_int64_特征(28),
‘宽度’:_int64_特征(28),
‘深度’:_int64_特征(1),
‘标签’:_int64_功能(标签),
“图像\u原始”:\u字节\u功能(序列化\u数组(图像))
}
out=tf.train.Example(features=tf.train.features(feature=data))
writer.write(out.SerializeToString())
计数+=1
writer.close()
打印(计数)
##负载特性
定义解析元素(元素):
解析_dict={
“高度”:tf.io.FixedLenFeature([],tf.int64),
“宽度”:tf.io.FixedLenFeature([],tf.int64),
“标签”:tf.io.FixedLenFeature([],tf.int64),
“深度”:tf.io.FixedLenFeature([],tf.int64),
“image_raw”:tf.io.FixedLenFeature([],tf.string)
}
示例\u message=tf.io.parse\u single\u示例(元素,parse\u dict)
img_raw=示例_消息['image_raw']
高度=示例_消息['height']
宽度=示例_消息['width']
深度=示例_消息['depth']
label=示例_消息['label']
feature=tf.io.parse\u张量(img\u raw,out\u type=tf.uint8)
feature=tf.重塑(feature,shape=[高度,宽度,深度])#需要或网络抛出有关缺少形状的错误
返回(特征、标签)
def get_数据集(文件名,设置类型):
忽略_order=tf.data.Options()
忽略_顺序。实验_确定性=错误#禁用本机顺序,提高速度
dataset=tf.data.TFRecordDataset(文件名)
dataset=dataset.with_选项(
忽略订单
)  
dataset=dataset.map(
parse_tfr_elem,num_parallel_calls=AUTOTUNE
)
dataset=dataset.shuffle(2048,每次迭代重新洗牌=True)
dataset=dataset.batch(批次大小)
数据集=数据集。预取(缓冲区大小=自动调谐)
dataset=dataset.repeat()如果set\u type==“train”else数据集
返回数据集
批量大小=32
tfr_数据集=获取_数据集('train.tfrecords',“train”)
对于tfr#U数据集中的样本。采取(1):#健全性检查
打印(样本)
##培训和评价
def get_cnn():
模型=tf.keras.Sequential([
Conv2D(内核大小=3,过滤器=16,填充class='same',激活class='relu',输入形状=[28,28,1]),
Conv2D(内核大小=3,过滤器=32,padding='same',activation='relu'),
tf.keras.layers.MaxPoolig2D(池大小=2),
Conv2D(kernel_size=3,filters=64,padding='same',activation='relu'),
tf.keras.layers.MaxPoolig2D(池大小=2),
Conv2D(kernel_size=3,filters=128,padding='same',activation='relu'),
tf.keras.layers.MaxPoolig2D(池大小=2),
Conv2D(内核大小=3,过滤器=256,padding='same',activation='relu'),
tf.keras.layers.GlobalAveragePoolig2D(),
tf.keras.layers.致密(10,'softmax')
])
优化器=tf.keras.optimizers.RMSprop(lr=0.01)
编译(loss='sparse\u categorical\u crossentropy',optim