详解tensorflow的slice_input_producer、string_input_producer和tf.train.batch函数

详解tensorflow的tf.train.slice_input_producer和tf.train.string_input_producer生成器 tf.train.slice_input_producer是什么 tf.train.slice_input_producer是一个tensor生成器,作用是按照设定,每次从一个tensor列表中按顺序或者随机抽取出一个tensor放入文件名队列。 tf.train.slice_input_producer函数 slice_input_producer(tensor_list, num_epochs... 阅读详情

tensorflow数据读取机制

tensorflow中为了充分利用GPU,减少GPU等待数据的空闲时间,使用了两个线程分别执行数据读入和数据计算。具体来说就是使用一个线程源源不断的将硬盘中的图片数据读入到一个内存队列中,另一个线程负责计算任务,所需数据直接从内存队列中获取。tf在内存队列之前,还设立了一个文件名队列,文件名队列存放的是参与训练的文件名,要训练 N个epoch,则文件名队列中就含有N个批次的所有文件名。 示例图如下:
https://i-blog.csdnimg.cn/blog_migrate/81a213311a65d7c808170a276cbf3e99.jpeg
图片来至于 https://zhuanlan.zhihu.com/p/27238630)

在N个epoch的文件名最后是一个结束标志,当tf读到这个结束标志的时候,会抛出一个 OutofRange 的异常,外部捕获到这个异常之后就可以结束程序了。而创建tf的文件名队列就需要使用到 tf.train.slice_input_producer 函数。

tf.train.slice_input_producer

slice_input_producer是一个tensor生成器,其作用是按照设定,每次从一个tensor列表中按顺序或者随机抽取出一个tensor放入队列。

tf.train.slice_input_producer函数参数

slice_input_producer(tensor_list, 
						num_epochs=None,
						shuffle=True, 
						seed=None,
						capacity=32,
						shared_name=None,
						name=None)
参数名说明
tensor_list包含一系列tensor的列表,表中tensor的第一维度的值必须相等,即个数必须相等,有多少个图像,就应该有多少个对应的标签
num_epochs可选参数,是一个整数值,代表迭代的次数,如果设置 num_epochs=None,生成器可以无限次遍历tensor列表,如果设置为 num_epochs=N,生成器只能遍历tensor列表N次。
shufflebool类型,设置是否打乱样本的顺序。一般情况下,如果shuffle=True,生成的样本顺序就被打乱了,在批处理的时候不需要再次打乱样本,使用 tf.train.batch函数就可以了;如果shuffle=False,就需要在批处理时候使用 tf.train.shuffle_batch函数打乱样本。
seed可选的整数,是生成随机数的种子,在第三个参数设置为shuffle=True的情况下才有用。
capacity设置tensor列表的容量。
shared_name可选参数,如果设置一个‘shared_name’,则在不同的上下文环境(Session)中可以通过这个名字共享生成的tensor。
name可选,设置操作的名称。

特别需要强调的是tf.train.slice_input_producer只是定义了样本放入文件名队列的方式,包括迭代次数,是否乱序等,要真正将文件放入文件名队列,还需要调用tf.train.start_queue_runners函数来启动执行文件名队列填充的线程,之后计算单元才可以把数据读出来,否则文件名队列为空的,计算单元就会处于一直等待状态,导致系统阻塞。

tf.train.slice_input_producer 使用示例

import tensorflow as tf

images = ['img1', 'img2', 'img3', 'img4', 'img5']
labels= [1,2,3,4,5]

epoch_num=8

f = tf.train.slice_input_producer([images, labels],num_epochs=None,shuffle=False)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess, coord=coord)
    for i in range(epoch_num):
        k = sess.run(f)
        print ('************************')
        print (i,k)

    coord.request_stop()
    coord.join(threads)

tf.train.slice_input_producer函数中shuffle=False,不对tensor列表乱序,输出:

************************
(0, ['img1', 1])
************************
(1, ['img2', 2])
************************
(2, ['img3', 3])
************************
(3, ['img4', 4])
************************
(4, ['img5', 5])
************************
(5, ['img1', 1])
************************
(6, ['img2', 2])
************************
(7, ['img3', 3])

如果设置shuffle=True,输出乱序:

************************
(0, ['img5', 5])
************************
(1, ['img4', 4])
************************
(2, ['img1', 1])
************************
(3, ['img3', 3])
************************
(4, ['img2', 2])
************************
(5, ['img3', 3])
************************
(6, ['img2', 2])
************************
(7, ['img1', 1])

tf.train.start_queue_runners()函数

QueueRunner类用来启动tensor的入队线程,可以用来启动多个工作线程同时将多个tensor(训练数据)推送入文件名称队列中,具体执行函数是 tf.train.start_queue_runners , 只有调用tf.train.start_queue_runners 之后,才会真正把tensor推入内存序列中,供计算单元调用,否则会由于内存序列为空,数据流图会处于一直等待状态。

tf.train.batch函数

tf.train.batch函数参数

tf.train.batch是一个tensor队列生成器,其作用是按照给定的tensor顺序,把batch_size个tensor推送到文件队列,作为训练一个batch的数据,等待tensor出队执行计算。

batch(tensors, 
      batch_size, 
      num_threads=1, 
      capacity=32,
      enqueue_many=False, 
      shapes=None, 
      dynamic_pad=False,
      allow_smaller_final_batch=False, 
      shared_name=None, 
      name=None)
参数说明
tensors1600ensor序列或tensor字典,可以是含有单个样本的序列;
batch_size生成的batch的大小;
num_threads执行tensor入队操作的线程数量,可以设置使用多个线程同时并行执行,提高运行效率,但也不是数量越多越好;
capacity定义生成的tensor序列的最大容量;
enqueue_many定义第一个传入参数tensors是多个tensor组成的序列,还是单个tensor;
shapes可选参数,默认是推测出的传入的tensor的形状;
dynamic_pad定义是否允许输入的tensors具有不同的形状,设置为True,会把输入的具有不同形状的tensor归一化到相同的形状;
allow_smaller_final_batch设置为True,表示在tensor队列中剩下的tensor数量不够一个batch_size的情况下,允许最后一个batch的数量少于batch_size, 设置为False,则不管什么情况下,生成的batch都拥有batch_size个样本;
shared_name可选参数,设置生成的tensor序列在不同的Session中的共享名称;
name操作的名称;

如果tf.train.batch的第一个参数 tensors 传入的是tenor列表或者字典,返回的是tensor列表或字典,如果传入的是只含有一个元素的列表,返回的是单个的tensor,而不是一个列表。

tf.train.batch函数使用示例

以下举例: 一共有5个样本,设置迭代次数是2次,每个batch中含有3个样本,不打乱样本顺序:

# -*- coding:utf-8 -*-
import tensorflow as tf
import numpy as np

# 样本个数
sample_num=5
# 设置迭代次数
epoch_num = 2
# 设置一个批次中包含样本个数
batch_size = 3
# 计算每一轮epoch中含有的batch个数
batch_total = int(sample_num/batch_size)+1

# 生成4个数据和标签
def generate_data(sample_num=sample_num):
    labels = np.asarray(range(0, sample_num))
    images = np.random.random([sample_num, 224, 224, 3])
    print('image size {},label size :{}'.format(images.shape, labels.shape))

    return images,labels

def get_batch_data(batch_size=batch_size):
    images, label = generate_data()
    # 数据类型转换为tf.float32
    images = tf.cast(images, tf.float32)
    label = tf.cast(label, tf.int32)

    #从tensor列表中按顺序或随机抽取一个tensor
    input_queue = tf.train.slice_input_producer([images, label], shuffle=False)

    image_batch, label_batch = tf.train.batch(input_queue, batch_size=batch_size, num_threads=1, capacity=64)
    return image_batch, label_batch

image_batch, label_batch = get_batch_data(batch_size=batch_size)

with tf.Session() as sess:
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess, coord)
    try:
        for i in range(epoch_num):  # 每一轮迭代
            print '************'
            for j in range(batch_total): #每一个batch
                print '--------'
                # 获取每一个batch中batch_size个样本和标签
                image_batch_v, label_batch_v = sess.run([image_batch, label_batch])
                # for k in
                print(image_batch_v.shape, label_batch_v)
    except tf.errors.OutOfRangeError:
        print("done")
    finally:
        coord.request_stop()
    coord.join(threads)

输出:


************
--------
((3, 224, 224, 3), array([0, 1, 2], dtype=int32))
--------
((3, 224, 224, 3), array([3, 4, 0], dtype=int32))
************
--------
((3, 224, 224, 3), array([1, 2, 3], dtype=int32))
--------
((3, 224, 224, 3), array([4, 0, 1], dtype=int32))

每次生成的batch中含有3个样本,不打乱次序,所以生成的tensor序列是按照‘0,1,2,3,4,0,1,2,3……’排列的。
如果设置每个batch中含有2个样本,打乱次序,即设置 batch_size = 2, tf.train.slice_input_producer函数中 shuffle=True,输出为:

************
--------
((2, 224, 224, 3), array([3, 0], dtype=int32))
--------
((2, 224, 224, 3), array([4, 1], dtype=int32))
--------
((2, 224, 224, 3), array([2, 3], dtype=int32))
************
--------
((2, 224, 224, 3), array([1, 0], dtype=int32))
--------
((2, 224, 224, 3), array([2, 4], dtype=int32))
--------
((2, 224, 224, 3), array([1, 4], dtype=int32))

与tf.train.batch函数相对的还有一个tf.train.shuffle_batch函数,两个函数作用一样,都是生成一定数量的tensor,组成训练一个batch需要的数据集,区别是tf.train.shuffle_batch会打乱样本顺序。

tf.train.string_input_producer()函数

跟tf.train.slice_input_producer()类似,不过是针对文件的生成器,传入文件路径列表,每次吐出一个文件。

tf.train.string_input_producer()函数参数

示例代

"""
读取文件数据
"""

import tensorflow as tf

# 我们放了3个文件在相应的位置
filename = ['data/A.csv', 'data/B.csv', 'data/C.csv']

# 将文件的路径作为参数传入函数
# 输出是文件队列,无法直接获取文件的值
file_queue = tf.train.string_input_producer(filename,
                                            shuffle=True,
                                            num_epochs=2)

# 文件读取器
reader = tf.WholeFileReader()
# key:文件名 value:文件值
key, value = reader.read(file_queue)

with tf.Session() as sess:
    # 对局部变量进行赋值
    sess.run(tf.local_variables_initializer())
    tf.train.start_queue_runners(sess=sess)  # 定义文件队列填充的线程
    for i in range(6):  # 文件数量3 * 2epochs
        print(sess.run([key, value]))

输出如下结果:

[b'data/A.csv', b'1.jpg,1\n2.jpg,2\n3.jpg,3\n']
[b'data/B.csv', b'4.jpg,4\n5.jpg,5\n6.jpg,6\n']
[b'data/C.csv', b'7.jpg,7\n8.jpg,8\n9.jpg,9\n']
[b'data/B.csv', b'4.jpg,4\n5.jpg,5\n6.jpg,6\n']
[b'data/A.csv', b'1.jpg,1\n2.jpg,2\n3.jpg,3\n']
[b'data/C.csv', b'7.jpg,7\n8.jpg,8\n9.jpg,9\n']

参考文献

[1]. tensorflow中协调器 tf.train.Coordinator 和入队线程启动器 tf.train.start_queue_runners_牧野的博客-优快云博客_tf.train.start_queue_runners https://blog.youkuaiyun.com/dcrmg/article/details/79780331#
[2]. TensorFlow之线程管理器tf.train.Coordinator_kk123k的博客-优快云博客_tf.train.coordinator https://blog.youkuaiyun.com/kk123k/article/details/86772678
[3]. tf.train.Coordinator_白头码客-优快云博客_tf.train.coordinator() https://blog.youkuaiyun.com/weixin_42052460/article/details/80714539
[4]. tensorflow中 tf.train.slice_input_producer 和 tf.train.batch 函数_牧野的博客-优快云博客_tf.train.slice_input_producer https://blog.youkuaiyun.com/dcrmg/article/details/79776876
[5]. 详解tensorflow的tf.train.slice_input_producer和tf.train.string_input_producer生成器_陈伟的梦呓-优快云博客_tf.train.slice_input_producer https://blog.youkuaiyun.com/keyandi/article/details/103683761
[6].十图详解tensorflow数据读取机制(附代码) - 知乎 https://zhuanlan.zhihu.com/p/27238630

LeGO-LOAM相对LOAM的改进---地面分离的方法-算法原理+代码讲解 实际上此种地⾯分离算法有⼀些简单,我们可以结合激光雷达安装⾼度等其他先验信息进⾏优化,避免将桌子这些当作地面点。LeGO-LOAM中前端改进中很重要的⼀点就是充分利⽤了地⾯点,那⾸先⾃然是提取对地⾯点的提取。理想情况下, 应该接近0,考虑到⼀⽅⾯激光雷达安装也⽆法做到绝对⽔平,另⼀⽅⾯,地⾯也不是绝。对⽔平,因此,这个⾓度会略微⼤于0,考虑到作者实际在草坪之类的场景下运动,因此这个值被设置成。如上图,相邻的两个扫描线束的同⼀列打在地⾯上如AB点所⽰,他们的垂直⾼度差。,计算垂直⾼度差和⽔平⾼度差的⾓度。.. 阅读详情

相关推荐

【故障排查】telnet连接失败:端口23不可达的深度分析与解决方案

本文深度解析telnet连接失败时端口23不可达的常见原因与解决方案。从快速自查目标地址、端口到服务端排查,涵盖服务状态检查、防火墙配置及安全组设置,并提供进阶诊断工具与抓包分析方法。文章强调telnet协议的安全风险,建议在生产环境中改用SSH等加密协议进行远程管理。

weixin_28323057的博客 392

tensorflow中 tf.train.slice_input_producer 和 tf.train.batch 函数

tensorflow数据读取机制tensorflow中为了充分利用GPU,减少GPU等待数据的空闲时间,使用了两个线程分别执行数据读入和数据计算。具体来说就是使用一个线程源源不断的将硬盘中的图片数据读入到一个内存队列中,另一个线程负责计算任务,所需数据直接从内存队列中获取。tf在内存队列之前,还设立了一个文件名队列,文件名队列存放的是参与训练的文件名,要训练 N个...

weixin_30702413的博客 874

Keil开发中CMSIS Driver API缺失问题的排查与解决

本文详细解析Keil开发中CMSIS Driver API缺失问题的根源与解决方案。针对版本不匹配、安装不完整等常见原因,提供在线与离线安装的对比及详细排查步骤,重点涵盖版本兼容性分析与项目配置验证,帮助开发者彻底解决API缺失错误并预防问题复发。

rust6ferris的博客 548

gitlab快速搭建方法

gitlab中文社区的教程 https://www.gitlab.com.cn/downloads/ GitLab中文文档 https://docs.gitlab.com.cn/omnibus/ 一、安装配置依赖项 如想使用Postfix来发送邮件,在安装期间请选择’Internet Site’. 您也可以用sendmai或者 配置SMTP...

******* ▄︻┻┳═一 ******* 2946

提示deepseek生成完整的json用于对接外部API

通过精准的提示词设计(字段过滤、格式约束)、动态验证机制(自检与修正)和官方模板参考,可有效确保DeepSeek生成的JSON纯净无冗余。

神棍之路 2303

qmc5883p芯片坐标系方向定义

问题 最近一个项目用到qmc5883p, 然而确定磁力计方向的时候发现datasheet上写的不是很清楚, 并且example中还有一个设置方向的一步, 于是测试了芯片坐标方向并记录了下来; 该芯片和qmc5883L方向并不一致; 结果 qmc5883P的datasheet给出来如下说明, Y为笔者添加的; 但是这个方向是按照datasheet的example设置的结果: //Define the sign for X Y and Z axis qmc5883p_write_reg(0x2

时有限 4112

详解tensorflow的tf.train.string_input_producer生成器和tf.train.slice_input_producer

tf.train.slice_input_producer() tf.train.slice_input_producer是一个tensor生成器,作用是按照设定,每次从一个tensor列表中按顺序或者随机抽取一个tensor放入队列。 函数: slice_input_producer(tensor_list, num_epochs=None, shuffle=True, seed=None, capacity=32, shared_name=None, name=None) 参数: tens

Owen_goodman的博客 1492

第一百三十九回 介绍三个BLE包

本章回中主要介绍了Flutter中BLE的概念和操作方法,主要介绍了三个BLE包的功能和差异,以方便大家在BLE操作中选择不同的包。

talk_8的专栏 573

tensorflow数据读取机制tf.train.slice_input_producer 和 tf.train.batch 函数

tensorflow中为了充分利用GPU,减少GPU等待数据的空闲时间,使用了两个线程分别执行数据读入和数据计算。 具体来说就是使用一个线程源源不断的将硬盘中的图片数据读入到一个内存队列中,另一个线程负责计算任务,所需数据直接从内存队列中获取。 tf在内存队列之前,还设立了一个文件名队列,文件名队列存放的是参与训练的文件名,要训练 N个epoch,则文件名队列中就含有N个批次的所有文件名。而创...

weixin_30417487的博客 323

基于uniapp开发PDA扫码枪APP:实现RFID批量扫描读取功能

基于uniapp的PDA扫码枪APP开发实战,实现高效RFID读取功能,uniapp整合PDA硬件的实践分享,基于uniapp的PDA端RFID批量扫描方案开发

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

使用SIMD思想进行memcpy的优化

arm64平台的memcpy的性能优化,相比C库提升30~40%,SIMD优化思路

zhaoxin1989的博客 1万+

tensorflow.slice_input_producer

功能主要是利用一个队列给网络结构进行输入,tensorlist:其实就是网络的输入输出,相当于做了一个组合def slice_input_producer(tensor_list, num_epochs=None, shuffle=True, seed=None, capacity=32, shared_name=None, name=None):

weixin_37725502的博客 686

基于半经验模型的熔断器燃弧过程计算与分析

本文针对1200V/1250A熔断器建立电弧燃烧半经验模型,通过ANSYS计算弧前时间,结合熔体烧蚀、石英砂烧蚀等物理过程简化建模。模型引入电导率随温度变化函数,利用Matlab拟合实验数据确定参数。分析表明:熔体宽度和节距增加会提高弧压峰值并缩短过零时间;总长固定时,断口数和节距影响较小。弧压峰值需控制在额定电压3倍内,过零时间需满足安全裕度。通过Python代码复现了电弧电导率模型、能量平衡方程及弧压计算,验证了熔体结构尺寸对电弧特性的影响规律。

huanghm88的专栏 257

Tensorflow读取大数据集的方法,tf.train.string_input_producer()和tf.train.slice_input_producer()

Tensorflow一共提供了3种读取数据的方法: 供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据,比如说用PIL和numpy处理数据然后喂入神经网络。 从文件读取数据: 在TensorFlow图的起始, 让一个输入管线从文件中读取数据,这就是这篇文将要讲的内容。 预加载数据: 在TensorFlow图中定义常量或变量来保存所有数据(仅适用于数...

qq_41427568的博客 8849

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

tensorflow中 tf.train.slice_input_producer 和 tf.train.string_input_producer的区别

tensorflow数据读取机制 https://blog.csdn.net/SweetSeven_/article/details/103602828 之前的文章已经详细记录过了,这里介绍一下tensorflow中两个读取队列中tensor的函数的区别 tf.train.slice_input_producer tf.train.slice_input_producer是...

一个平平无奇的甜妹 811

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

两个input_TF学习——补充附录(11)数据读取slice/string_input_producer区别、代码

本节主要讲解 tensorflow数据读取机制 tf.train.slice_input_producer、 tf.train.string_input_producer 和 tf.train.batch 函数tensorflow数据读取机制tensorflow中为了充分利用GPU,减少GPU等待数据的空闲时间,使用了两个线程分别执行数据读入和数据计算。具体来说就是使用一个线程源源不断的将硬盘中的...

weixin_39788572的博客 132

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

tensorflow——tf.train.slice_input_producer,tf.train.string_input_producer两种队列批量读取方式研究

一.tf.train.slice_input_producer()    tf.train.slice_input_producer([image,label],num_epochs=10),随机产生一个图片和标签,num_epochs=10,则表示把所有的数据过10遍,使用完所有的图片数据为一个epoch,这是重复使用10次。上面的用法表示你的数据集和标签已经全部加载到内存中了,如果数据集非常庞...

AmibitionWei的博客 8421

for input string: 2 }_TF学习——补充附录(11)数据读取slice/string_input_producer区别、代码...

本节主要讲解 tensorflow数据读取机制 tf.train.slice_input_producer、 tf.train.string_input_producer 和 tf.train.batch 函数tensorflow数据读取机制tensorflow中为了充分利用GPU,减少GPU等待数据的空闲时间,使用了两个线程分别执行数据读入和数据计算。具体来说就是使用一个线程源源不断的将硬盘中的...

weixin_39549936的博客 227

tf.train.slice_input_producer,tf.train.string_input_producer两种队列批量读取方式

一.tf.train.slice_input_producer()    tf.train.slice_input_producer([image,label],num_epochs=10),随机产生一个图片和标签,num_epochs=10,则表示把所有的数据过10遍,使用完所有的图片数据为一个epoch,这是重复使用10次。上面的...

桓一一的博客 1611

tensorflow的数据读取机制

tf.cast()数据类型转换 tf.cast()函数的作用是执行 tensorflow 中张量数据类型转换,比如读入的图片如果是int8类型的,一般在要在训练前把图像的数据格式转换为float32。 int32转换为float32: import tensorflow as tf t1 = tf.Variable([1,2,3,4,5]) t2 = tf.cast(t1,dtype=tf.float32) print('t1: {}'.format(t1)) print( 't2: {}'.format

花开 流年 226

遇到的问题与解决办法(tf.train.shuffle_batch与tf.train.slice_input_producer)

1. 在读入数据时,采用了如下代码形式 def read_image(image_path): """the image_path is the path of single image""" file_contents = tf.read_file(input_queue[0]) image_data = tf.image.decode_jpeg(file_cont

wuguangbin1230的博客 1万+

TensorFlow get_batch()内队列批量读取方式的研究

转自:https://blog.csdn.net/qq_30666517/article/details/79715045 tensorflow—tf.train.slice_input_producer,tf.train.string_input_producer两种队列批量读取方式研究 一.tf.train.slice_input_producer()     tf.train.slic...

qq_32445015的博客 5725

python-tensorflow Coordinate和QueueRunner配合管理队列-注入数据

aa

xingghaoyuxitong的博客 193

c fscanf 按行读取文件_TensorFlow学习Program1——12.读取csv文件之流程、案例(读取单个文件+文件集)

两种解说,各有侧重。可以直接看第二种解说,从代码案例直接理解。本文核心就是要掌握 tf.train.slice_input_producer、 tf.train.string_input_producer 和 tf.train.batch 等函数的使用(不限于用于csv文件),我已总结在另一个帖子中 <补充附录(11)数据读取slice/string_input_producer区别、代码&...

weixin_39847556的博客 371

拼接 结果集_TensorFlow学习Program1——12.读取csv文件之流程、案例(读取单个文件+文件集)...

两种解说,各有侧重。可以直接看第二种解说,从代码案例直接理解。本文核心就是要掌握 tf.train.slice_input_producer、 tf.train.string_input_producer 和 tf.train.batch 等函数的使用(不限于用于csv文件),我已总结在另一个帖子中 <补充附录(11)数据读取slice/string_input_producer区别、代码&...

weixin_33824385的博客 127

TensorFlow 2.0 十大核心更新:从 eager 执行到 SavedModel 的工程实践指南

TensorFlow 2.0 并非简单版本升级,而是面向工程效率的范式重构。其核心围绕 Eager Execution(即时执行)与 Keras 统一 API 展开,通过默认启用动态图、废除 variable_scope、强化 tf.function 编译机制等设计,显著降低调试成本与协作门槛。技术价值体现在开发可读性提升、训练循环简化、分布式扩展零侵入、模型部署标准化(SavedModel)四大维度。典型应用场景包括推荐系统快速迭代、NLP 模型微调、CV 模型服务化及金融风控实时推理——尤其在需频繁 A

weixin_34413802的博客 368
上一篇: TensorFlow之线程管理器tf.train.Coordinator
下一篇: Flink的物理分区策略
Accelerating
博客等级 码龄9年 3220粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值