Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何有效地将数据输入TensorFlow 2.x,

如何有效地将数据输入TensorFlow 2.x,
EN

Stack Overflow用户
提问于 2021-03-13 02:52:23
回答 1查看 268关注 0票数 2

我正在查看大量文本数据上的数据预处理任务,希望将预处理后的数据加载到TensorFlow 2.x中。预处理数据包含整数值数组,因为预处理步骤生成:

  • 一个热编码数组作为标签列
  • 每个数据行的令牌标记列表。
  • 变压器中使用的激活掩码

因此,我一直在想,我将使用pyspark对数据进行预处理,并将结果转储到JSON文件中(因为CSV不能存储结构化数据)。到目前为止,一切顺利。但是,我在tf.data.Dataset中处理tf.data.Dataset文件时遇到了问题(或者其他任何可以与TensorFlow 2.x接口的高效扩展文件)。

除了Tensorflow和PySpark之外,我不想使用/安装一个额外的库(例如PySpark),所以我想知道是否有可能使用JSON文件高效地链接这两个库,因为似乎没有其他方法来保存/加载包含数据列表的记录(?)。JSON测试文件如下所示:

代码语言:javascript
运行
AI代码解释
复制
readDF = spark.read.format('json').option('header',True).option('sep','|').load('/output.csv')
readDF.select('label4').show(15, False)

+---------------------------------------------------------+
|label4                                                   |
+---------------------------------------------------------+
|[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]|
|[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]|
|[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]|
|[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]|
|[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]|
|[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]|
|[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]|
|[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]|
|[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]|
|[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]|
|[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]|
|[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]|
|[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]|
|[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]|
|[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]|
+---------------------------------------------------------+

因此,label4列已经进行了一个热编码,令牌化文本列在应用到它之后将类似于它。因此,我的问题是:一个JSON文件是否能够用tf.data.Dataset高效地加载(可能通过生成器函数),或者我应该为这个文件选择一条不同的道路(有一个额外的库)?

EN

回答 1

Stack Overflow用户

发布于 2021-03-17 07:18:00

tf.data提供了几种有效使用来自不同来源的数据的方法。虽然我会说“更干净”的解决方案可能是使用TensorFlow本身来处理预处理,但让我为您的用例提供一些建议:

1)单热编码

我可以看到,你预处理数据并存储整个一个热编码向量,这将惩罚你的数据传输,因为你将读取大部分的零,而不是实际感兴趣的标签。我建议将其编码为整数,并在摄入时使用python生成器将其转换为一个热编码。或者,如果使用分类交叉熵损失函数,则可以使用标签编码(将每个类编码为整数),并使用稀疏范畴交叉熵

如果您已经有了一个热编码列表,您可以简单地使用my_list.index(1)获取标签编码(毕竟,它与向量中唯一1的索引相同)。

2)使用发电机

使用tf.data完全可以做到这一点。实际上,它们提供了from_generator函数来包装python,用于将数据摄取到模型中。如文档中所示,您将这样使用它:

代码语言:javascript
运行
AI代码解释
复制
def gen():
  ragged_tensor = tf.ragged.constant([[1, 2], [3]])
  yield 42, ragged_tensor

dataset = tf.data.Dataset.from_generator(
     gen,
     output_signature=(
         tf.TensorSpec(shape=(), dtype=tf.int32),
         tf.RaggedTensorSpec(shape=(2, None), dtype=tf.int32)))

list(dataset.take(1))

3)考虑回到CSV

如果您正在处理大量的数据,您可能可以围绕JSON编码并在类似CSV的格式(如TSV )中编码某些结构,如果需要类似列表的列,则可以使用其他分隔符(例如,您可以通过\t分隔列,然后可以使用,|分离列中的元素,或者使用任何字符可以减少与现有数据的冲突。

作为一个示例,让我们假设您的CSV文件具有以下结构:

代码语言:javascript
运行
AI代码解释
复制
comlumn name 1, column name 2, column name 3, column name 4
0.1,0.2,0.3,0:0:0:1
0.1,0.2,0.3,0:0:1:0
0.1,0.2,0.3,0:1:0:0
...

也就是说,您有4列由,分隔,而第4栏本身是一个由:分隔的值列表,它也是4个类的一个热门表示形式,您可以在上面的代码中使用一个生成器:

代码语言:javascript
运行
AI代码解释
复制
def my_generator(filename):
    first_line = True
    with open(filename) as f:
        for line in f:
            if first_line:
                # do something to handle the header
                first_line = False
                continue
            fields = line.split(',')
            # here you extract the index of the one-hot encoded class
            label = fields[3].split(':').index(1)
            fields[3] = label
            yield fields # return a list of features and the class
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66612607

复制
相关文章
在MacOSX机器上设置JenkinsCI服务器
Jenkins Wiki提供了用于Jenkins安装的选项列表,但没有提及Mac OSX。尽管它提到了Docker,但我只听说过有关Docker的好消息。在本文中,我将坚持使用自制软件。在继续操作之前您需要在Mac上安装和配置JDK。
DevOps云学堂
2020/07/24
2.5K0
Archiva 仓库提示文件没有找到
如果提示的是 404 的话,提示你的 Archiva 在可能的源仓库中已经进行了搜索,但是没有找到。
HoneyMoose
2020/04/13
6750
Archiva 仓库提示文件没有找到
Ubuntu 上使用 ADB 备份 Android 数据
adb全称Android Debug Bridge,是Android SDK中的一个工具, 使用adb可以直接操作管理Android模拟器或者真实的Andriod设备,就是起到调试桥的作用。
会长君
2023/04/25
7380
在mac上使用adb与fastboot
要在OSX上管理Android手机上的文件,需要下载安装这个官方工具http://www.android.com/filetransfer/
老高的技术博客
2022/12/27
2.6K0
在mac上使用adb与fastboot
在 MAC OS X 安装 ADB (Android调试桥)
什么是 ADB? Android调试桥( adb )是一个开发工具,帮助安卓设备和个人计算机之间的通信。 这种通信大多是在USB电缆下进行,但是也支持Wi-Fi连接。 adb 还可被用来与电脑上运行的
昨天50还没用完
2018/06/29
9.3K0
ADB 学习(4):adb shell (上)
安卓系统是基于Linux系统开发,也就支持常见的Linux的命令,这些命令都保存在手机 “/system/bin” 的目录下,我们连接手机就可以使用命令 adb shell 来执行这些命令。
Mokwing
2020/09/08
2.6K0
软件测试|Appium WebView 技术原理
混合应用测试或微信小程序测试,都会涉及到 WebView 组件,这节内容将分析一下 WebView 的技术原理。首先通过日志分析查看 Appium 的运行过程。
霍格沃兹测试开发Muller老师
2023/01/09
8260
android 调试 adb
一、包名和界面名的概念 1.包名(package):决定程序的唯一(不是应用名) 2.界面名(activty):粗浅的一个界面,对应着一个界面
bosh123
2020/08/02
7400
自动化测试微信小程序
Mac 环境下搭建 appium 1 安装homebrew 首先命令行检查是否安装:
赵云龙龙
2019/09/25
2.8K0
自动化测试微信小程序
MacOSX 安装 TensorFlow
TensorFlow 安装的前提是系统安装了 Python 2.5 或更高版本,教程中的例子是以 Python 3.6(Anaconda 3 版)为基础设计的。为了安装 TensorFlow,首先确保你已经安装了 Anaconda。可以从网址(https://www.anaconda.com/distribution/#download-section)中下载并安装适用于 Windows/macOS 或 Linux 的 Anaconda。
叉叉敌
2020/02/14
9310
MacOSX 安装 TensorFlow
使用adb logcat命令显示Android设备上的Log日志
实现这个功能的前提是使用adb命令,所以必须要有手机和电脑,还有安装adb,adb程序是很小的几M就可以。
全栈程序员站长
2022/06/28
12.9K0
使用adb logcat命令显示Android设备上的Log日志
Android 调试桥 (adb)
adb 包含在 Android SDK 平台工具软件包中。您可以使用 SDK 管理器下载此软件包,该管理器会将其安装在 android_sdk/platform-tools/ 下。
云深无际
2021/04/14
5.4K0
Android 调试桥 (adb)
Android 常见adb命令
C:\Users\laiyu>adb push d:\\WiFi.apk /mnt/sdcard/
授客
2019/09/11
7910
Start an Android App by ADB
To be more geek,I began to start an Android App by using adb.Thanks to Google.It’s possible and powerful. The tool we use to make it is ADB(Android Debug Tool),For more detailed use please visit http://developer.android.com/tools/help/adb.html#shellcommands Actually What I use here is
技术小黑屋
2018/09/04
1K0
安卓安全测试框架--drozer环境搭建
随着app的质量要求不断的越来越高,跟随着我们的技术的不断进步,对于安全测试的需求也是逐渐增多,那么针对app,我们如何做安全测试呢,工欲善其事必先利其器。我们这节课看下安卓安全测试工具--drozer的环境搭建。入门第一步就是环境搭建。
雷子
2021/03/15
1.5K0
安卓安全测试框架--drozer环境搭建
Android性能稳定性测试工具mobileperf
天猫团队开源的PC Android性能稳定性测试工具,可以收集Android性能数据: cpu 内存 流畅度fps logcat日志 流量 进程线程数 进程启动日志,mobileperf也支持原生monkey test。那么我们先来看看如何安装它。
雷子
2021/03/15
2.4K0
Android性能稳定性测试工具mobileperf
自动化-Appium-环境搭建-Android(Java版)
JDK(Java Development Kit)是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的Java应用程序。JDK是整个Java开发的核心,它包含了Java的运行环境,Java工具和Java基础的类库。
wangmcn
2022/07/25
5.2K0
自动化-Appium-环境搭建-Android(Java版)
Android ADB命令大全
adb shell cat /sys/class/net/wlan0/address
软件测试君
2019/06/03
1.2K0
Android adb命令大全
一般在安装的时候先敲出adb install然后直接将apk文件拖到MS Dos窗口中即可,然后点击回车即可自动安装。
程序员飞飞
2020/02/27
1.4K0
点击加载更多

相似问题

在MacOSX上安装Android/Eclipse - adb不工作

30

在访问adb时没有找到Android findstr

15

‘`adb’文件没有显示在Android 11仿真程序上

14

Android演播室-无法在ubuntu上找到adb

23

未找到Android SDK文件: adb -但在哪个adb中可见

151
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档