专栏首页share ai happiness图像 | 文本怎么输入到模型 ?

图像 | 文本怎么输入到模型 ?

图像表示

这个是一个手写数字识别的问题。左边是一个图像,右边是一个二维矩阵(14*14),每一个矩阵对应的位置是一个像素值,在这里白色代表。那左边那个Y={0 1 0 0 0 0 0 0 0 0}表示一个向量,相当于一个答案,输入一个x对应一个标签Y,这个Y一般是一维数组,具体得看是几分类问题,就是几位数组,看属于哪个类别,属于哪个类别哪个类别等于1,其他的等于0。

手写数组是一个十分类问题,把每张图片分成0、1....十个里边一个,所以为10维向量,Y={0 1 0 0 0 0 0 0 0 0}代表1这个类别是第二个维度,就是说输入值x是14*14矩阵,对应标签是1类别,1类别代表1的是第二个维度,剩下的都是0。

# 输入数据,二维图片
x = tf.placeholder(tf.float32,  # 数据类型      
          [batch_size,   # 批大小       
          img_width, # 图片宽度       
          img_height, # 图片长度       
          img_channels], # 图片深度,RGB为3,灰度图为0      
          name=‘input’)
y_ = tf.placeholder(tf.float32,   # 数据类型      
          [batch_size,    # 批大小       
          class_size], # 目标类别数目       
          name=‘output’)

TensorFlow这个图片是怎么表示的。往下看,都是用placeholder来初始化参数,看具体参数值:

  • x的表示:数据类型、批大小、图像宽度和高度,图片深度(灰度图是没有通道,只有两个为宽和高,彩色为RGB,为3个通道,变成了三维数组)。
  • y的表示:这里说一下和x不一样的地方,class_size类别数目,分成几个类别。
  • 定义一个名称:input和output。
# 输入数据,二维图片
x = tf.placeholder(tf.float32,  # 数据类型      
          [None,  14, 14]  # 输入维度       
          name=‘input’)
y_ = tf.placeholder(tf.float32,   # 数据类型      
          [None, 10], # 输出维度       
          name=‘output’)

刚刚数字识别的图片怎么表示呢?

  • x表示:None代表的是批,宽和高都是14,因为是灰度图,只有一个channel,可以不写。
  • y表示:分成10类,class_size就给10。

将大小为14*14的灰度图分成10类

文字怎么表示呢?

文本表示

TF is best

文本符号 -> 数值向量

# 输入数据,文本序列
x = tf.placeholder(tf.int32,  # 数据类型
      [batch_size,   # 批大小
       seq_len], # 词序列长度
       name=‘input’)
y_ = tf.placeholder(tf.float32,   # 数据类型
      [batch_size,    # 批大小
       class_size], # 目标类别数目
       name=‘output’)
emb = tf.get_variable(“emb”,
        [vocab_size, # 词汇表大小
        emb_size]) # 词向量维度
Inputs = tf.nn.embedding_lookup(emb, x) # 向量映射

这是文本的表示方式,x和y就不解释了,emb表示:vocab_size有几行就有几个词汇,emb_size每个词表示多长的维度,emb可以看成一行一行向量,每一行向量代表的是一个词对应的向量表示。

embedding_lookup(emb,x),x前面说了是整数的向量,整数的长度是seq序列的长度或者句子长度,序列的长度是由好多整数组成,整数代表原来这个词,这个词表示在emb这个矩阵里边,这个词对应的是哪一行,emb是一行行向量,每个词就是对应的向量表示,x里边整数表示,所有整数代表不同的词对应emb表里边的索引。

所以说文本输入是这样:首先把每个句子或词转换成词在emb表里边的索引值,然后再把这个索引值通过emb表映射成对应的向量值,生成这个input,输入到模型里边。

# 输入数据,文本序列

# get_variable
# 根据变量名称直接获取,如果不存在就创建一个新的
emb = tf.get_variable(name=“emb”,
        [ vocab_size, //词汇表大小
          emb_size ], //词向量维度
        initializer) //词向量矩阵,训练好的
# Variable
# 创建一个新的变量,用具体的值初始化,变量名称可选
emb = tf.Variable(initializer, //词向量矩阵,训练好的
         name=“emb” //变量名称(可选)

get_variable是可以共享变量的,通过共享名称name,首先会在变量空间里边找有没有这个名称是emb的,如果有会直接用,如果没有才会去创建emb表。

# 输入数据,文本序列
x = tf.placeholder(tf.int32,  # 数据类型
      [None,  30], # 输入维度
      name=‘input’)
y_ = tf.placeholder(tf.float32,   # 数据类型
      [None, 2], # 输出维度
       name=‘output’)

emb = tf.get_variable(“emb”, [8, 6]) # 词向量维度

input = tf.nn.embedding_lookup(emb, x) # 向量映射

批是None,30:句子一般是由30个词组成。Y:要进行2分类。使用get_variable()创建词向量,维度是8*6,词汇表有8个,每个词汇表要表示6维向量。用embedding_lookup进行映射,把每个整数映射成向量,进行input表,就是把原来(None批*30)变成现在(None批*30*6维向量)。

文本输入表示

embedding matrix 每一行代表一个词对应的向量

假设已经有训练好的embedding matrix,现在输入词,TF is best三个词,首先先映射成[2,5,7],代表词在向量表中的索引,可以用onehot进行表示,向量的长度相当于词汇表长度、矩阵的行数,向量直接和embedding表进行相乘,得到的结果就是模型要做的输入。

小结

  • 图片的输入表示
  • 文本的输入表示

本文分享自微信公众号 - 1001次重燃(smile765999),作者:木野归郎

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MNIST数据集 — 前期准备

    前面都是基础零碎的知识,需要通过一个栗子来为大家把整个流程走一遍,从整体上对TensorFlow进行一个把握,大概分为四篇文章来说明吧(前期准备、前馈计算、模型...

    木野归郎
  • 大数据之数仓概念

    这几天看了一些专业的解释,还是对ODS、DW和DM认识不够深刻,所以就查了相关的资料,分享给大家一起学习。

    木野归郎
  • 爬虫框架Scrapy总结笔记

    由于工作需要,学习一下爬虫框架,在网上看了别人的笔记和教学视频,想总结一下便于以后复习用,然后和大家分享一下。

    木野归郎
  • 聊聊flink DataStream的join操作

    flink-streaming-java_2.11-1.7.0-sources.jar!/org/apache/flink/streaming/api/data...

    codecraft
  • [深度概念]·模型集成(Ensemble)解析

    曾经听过一句话,”Feature为主,Ensemble为后”。Feature决定了模型效果的上限,而Ensemble就是让你更接近这个上限。Ensemble讲究...

    小宋是呢
  • 聊聊flink DataStream的join操作

    flink-streaming-java_2.11-1.7.0-sources.jar!/org/apache/flink/streaming/api/data...

    codecraft
  • 2020年Go开发者调查:支持泛型仍是核心需求

    近日,Go 官方发布了 2020 年 Go 开发者调查报告,共计有 9684 位开发者参与了调查。2020 年,Go 语言的使用率上升到了 76%,66% 的受...

    深度学习与Python
  • 自然语言处理--特征提取

    自然语言中意义最小的单位就是单词,其次是句子,再是段落,最后一整篇文章。 通常来说,提取单词的特征是最常用的提取方法。当然,特征提取也是根据你看问题的角度的来决...

    linxinzhe
  • Python 3 查看字符编码方法

    BigYoung小站
  • 文本数据的对抗性攻击和防御:综述(CS CL)

    近年来,深度学习模型已广泛用于各种目的,包括对象识别,自动驾驶汽车,面部识别,语音识别,情感分析等。然而,近年来的研究表明,这些模型对噪声具有很强的抵抗能力,从...

    蔡秋纯

扫码关注云+社区

领取腾讯云代金券

,,