中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
【深度學(xué)習(xí)系列】PaddlePaddle之?dāng)?shù)據(jù)預(yù)處理


PaddlePaddle的基本數(shù)據(jù)格式

  根據(jù)官網(wǎng)的資料,總結(jié)出PaddlePaddle支持多種不同的數(shù)據(jù)格式,包括四種數(shù)據(jù)類(lèi)型和三種序列格式:

四種數(shù)據(jù)類(lèi)型

  • dense_vector:稠密的浮點(diǎn)數(shù)向量。

  • sparse_binary_vector:稀疏的二值向量,即大部分值為0,但有值的地方必須為1。

  • sparse_float_vector:稀疏的向量,即大部分值為0,但有值的部分可以是任何浮點(diǎn)數(shù)。

  • integer:整型格式

api如下:

  • paddle.v2.data_type.dense_vector(dim, seq_type=0)

    • dim(int) 向量維度

    • seq_type(int)輸入的序列格式

    • 說(shuō)明:稠密向量,輸入特征是一個(gè)稠密的浮點(diǎn)向量。舉個(gè)例子,手寫(xiě)數(shù)字識(shí)別里的輸入圖片是28*28的像素,Paddle的神經(jīng)網(wǎng)絡(luò)的輸入應(yīng)該是一個(gè)784維的稠密向量。

    • 參數(shù):

    • 返回類(lèi)型:InputType

  • paddle.v2.data_type.sparse_binary_vector(dim, seq_type=0)

    • 說(shuō)明:稀疏的二值向量。輸入特征是一個(gè)稀疏向量,這個(gè)向量的每個(gè)元素要么是0,要么是1

    • 參數(shù):同上

    • 返回類(lèi)型:同上

    • paddle.v2.data_type.sparse_vector(dim, seq_type=0)

      • 說(shuō)明:稀疏向量,向量里大多數(shù)元素是0,其他的值可以是任意的浮點(diǎn)值

      • 參數(shù):同上

      • 返回類(lèi)型:同上

    • paddle.v2.data_type.integer_value(value_range, seq_type=0)

      • seq_type(int):輸入的序列格式

      • value_range(int):每個(gè)元素的范圍

      • 說(shuō)明:整型格式

      • 參數(shù):  

      • 返回類(lèi)型:InputType

      三種序列格式:

      • SequenceType.NO_SEQUENCE:不是一條序列

      • SequenceType.SEQUENCE:是一條時(shí)間序列

      • SequenceType.SUB_SEQUENCE: 是一條時(shí)間序列,且序列的每一個(gè)元素還是一個(gè)時(shí)間序列。

      api如下:

      • paddle.v2.data_type.dense_vector_sequence(dim, seq_type=0)


        • 說(shuō)明:稠密向量的序列格式

        • 參數(shù):dim(int):稠密向量的維度

        • 返回類(lèi)型:InputType

      • paddle.v2.data_type.sparse_binary_vector_sequence(dim, seq_type=0)

        • 說(shuō)明:稀疏的二值向量序列。每個(gè)序列里的元素要么是0要么是1

        • 參數(shù):dim(int):稀疏向量的維度

        • 返回類(lèi)型:InputType

      • paddle.v2.data_type.sparse_non_value_slot(dim, seq_type=0)


          • dim(int):稀疏向量的維度

          • seq_type(int):輸入的序列格式

          • 說(shuō)明:稀疏的向量序列。每個(gè)序列里的元素要么是0要么是1

          • 參數(shù):

          • 返回類(lèi)型:InputType

        • paddle.v2.data_type.sparse_value_slot(dim, seq_type=0)

          • dim(int):稀疏向量的維度


          • seq_type(int):輸入的序列格式

          • 說(shuō)明:稀疏的向量序列,向量里大多數(shù)元素是0,其他的值可以是任意的浮點(diǎn)值

          • 參數(shù):

          • 返回類(lèi)型:InputType

            • 說(shuō)明:value_range(int):每個(gè)元素的范圍

            • paddle.v2.data_type.integer_value_sequence(value_range, seq_type=0)


            不同的數(shù)據(jù)類(lèi)型和序列模式返回的格式不同,如下表:


          其中f表示浮點(diǎn)數(shù),i表示整數(shù)

          注意:對(duì)sparse_binary_vector和sparse_float_vector,PaddlePaddle存的是有值位置的索引。例如,

          • 對(duì)一個(gè)5維非序列的稀疏01向量 [0, 1, 1, 0, 0] ,類(lèi)型是sparse_binary_vector,返回的是 [1, 2] 。(因?yàn)橹挥械?位和第2位有值)

          • 對(duì)一個(gè)5維非序列的稀疏浮點(diǎn)向量 [0, 0.5, 0.7, 0, 0] ,類(lèi)型是sparse_float_vector,返回的是 [(1, 0.5), (2, 0.7)] 。(因?yàn)橹挥械谝晃缓偷诙挥兄?,分別是0.5和0.7)


           

          PaddlePaddle的數(shù)據(jù)讀取方式

            我們了解了上文的四種基本數(shù)據(jù)格式和三種序列模式后,在處理自己的數(shù)據(jù)時(shí)可以根據(jù)需求選擇,但是處理完數(shù)據(jù)后如何把數(shù)據(jù)放到模型里去訓(xùn)練呢?我們知道,基本的方法一般有兩種:

          • 一次性加載到內(nèi)存:模型訓(xùn)練時(shí)直接從內(nèi)存中取數(shù)據(jù),不需要大量的IO消耗,速度快,適合少量數(shù)據(jù)。

          • 加載到磁盤(pán)/HDFS/共享存儲(chǔ)等:這樣不用占用內(nèi)存空間,在處理大量數(shù)據(jù)時(shí)一般采取這種方式,但是缺點(diǎn)是每次數(shù)據(jù)加載進(jìn)來(lái)也是一次IO的開(kāi)銷(xiāo),非常影響速度。

           

            在PaddlePaddle中我們可以有三種模式來(lái)讀取數(shù)據(jù):分別是reader、reader creator和reader decorator,這三者有什么區(qū)別呢?

          • reader:從本地、網(wǎng)絡(luò)、分布式文件系統(tǒng)HDFS等讀取數(shù)據(jù),也可隨機(jī)生成數(shù)據(jù),并返回一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)。

          • reader creator:一個(gè)返回reader的函數(shù)。

          • reader decorator:裝飾器,可組合一個(gè)或多個(gè)reader。

           

            reader

            我們先以reader為例,為房?jī)r(jià)數(shù)據(jù)(斯坦福吳恩達(dá)的公開(kāi)課第一課舉例的數(shù)據(jù))創(chuàng)建一個(gè)reader:

          1. 創(chuàng)建一個(gè)reader,實(shí)質(zhì)上是一個(gè)迭代器,每次返回一條數(shù)據(jù)(此處以房?jī)r(jià)數(shù)據(jù)為例)

          reader = paddle.dataset.uci_housing.train()

            2. 創(chuàng)建一個(gè)shuffle_reader,把上一步的reader放進(jìn)去,配置buf_size就可以讀取buf_size大小的數(shù)據(jù)自動(dòng)做shuffle,讓數(shù)據(jù)打亂,隨機(jī)化

          shuffle_reader = paddle.reader.shuffle(reader,buf_size= 100)

            3.創(chuàng)建一個(gè)batch_reader,把上一步混洗好的shuffle_reader放進(jìn)去,給定batch_size,即可創(chuàng)建。

          batch_reader = paddle.batch(shuffle_reader,batch_size = 2)

           

            這三種方式也可以組合起來(lái)放一塊:

          reader = paddle.batch(    paddle.reader.shuffle(        uci_housing.train(),    buf_size = 100),    batch_size=2)    

             可以以一個(gè)直觀(guān)的圖來(lái)表示:

          從圖中可以看到,我們可以直接從原始數(shù)據(jù)集里拿去數(shù)據(jù),用reader讀取,一條條灌倒shuffle_reader里,在本地隨機(jī)化,把數(shù)據(jù)打亂,做shuffle,然后把shuffle后的數(shù)據(jù),一個(gè)batch一個(gè)batch的形式,批量的放到訓(xùn)練器里去進(jìn)行每一步的迭代和訓(xùn)練。 流程簡(jiǎn)單,而且只需要使用一行代碼即可實(shí)現(xiàn)整個(gè)過(guò)程。 

           

            reader creator

            如果想要生成一個(gè)簡(jiǎn)單的隨機(jī)數(shù)據(jù),以reader creator為例:

          def reader_creator():    def reader():        while True:            yield numpy.random.uniform(-1,1,size=784)    return reader

             源碼見(jiàn)creator.py, 支持四種格式:np_array,text_file,RecordIO和cloud_reader

          __all__ = ['np_array', 'text_file', 'cloud_reader']

          def np_array(x):

              '''

              Creates a reader that yields elements of x, if it is a

              numpy vector. Or rows of x, if it is a numpy matrix.

              Or any sub-hyperplane indexed by the highest dimension.

              :param x: the numpy array to create reader from.

              :returns: data reader created from x.

              '''

              def reader():

                  if x.ndim <>

                      yield x


                  for e in x:

                      yield e

              return reader

          def text_file(path):

              '''

              Creates a data reader that outputs text line by line from given text file.

              Trailing new line ('\\\\n') of each line will be removed.

              :path: path of the text file.

              :returns: data reader of text file

              '''


              def reader():

                  f = open(path, 'r')

                  for l in f:

                      yield l.rstrip('\n')

                  f.close()

              return reader

          def recordio(paths, buf_size=100):

              '''

              Creates a data reader from given RecordIO file paths separated by ',',

                  glob pattern is supported.

              :path: path of recordio files, can be a string or a string list.

              :returns: data reader of recordio files.

              '''


              import recordio as rec

              import paddle.v2.reader.decorator as dec

              import cPickle as pickle


              def reader():

                  if isinstance(paths, basestring):

                      path = paths

                  else:

                      path = ','.join(paths)

                  f = rec.reader(path)

                  while True:

                      r = f.read()

                      if r is None:

                          break

                      yield pickle.loads(r)

                  f.close()

              return dec.buffered(reader, buf_size)

          pass_num = 0

          def cloud_reader(paths, etcd_endpoints, timeout_sec=5, buf_size=64):

              '''

              Create a data reader that yield a record one by one from

                  the paths:

              :paths: path of recordio files, can be a string or a string list.

              :etcd_endpoints: the endpoints for etcd cluster

              :returns: data reader of recordio files.

              ..  code-block:: python

                  from paddle.v2.reader.creator import cloud_reader

                  etcd_endpoints = 'http://127.0.0.1:2379'

                  trainer.train.(

                      reader=cloud_reader(['/work/dataset/uci_housing/uci_housing*'], etcd_endpoints),

                  )

              '''

              import os

              import cPickle as pickle

              import paddle.v2.master as master

              c = master.client(etcd_endpoints, timeout_sec, buf_size)


              if isinstance(paths, basestring):

                  path = [paths]

              else:

                  path = paths

              c.set_dataset(path)


              def reader():

                  global pass_num

                  c.paddle_start_get_records(pass_num)

                  pass_num += 1


                  while True:

                      r, e = c.next_record()

                      if not r:

                          if e != -2:

                              print 'get record error: ', e

                          break

                      yield pickle.loads(r)


              return reader


          reader decorator

            如果想要讀取同時(shí)讀取兩部分的數(shù)據(jù),那么可以定義兩個(gè)reader,合并后對(duì)其進(jìn)行shuffle。如我想讀取所有用戶(hù)對(duì)比車(chē)系的數(shù)據(jù)和瀏覽車(chē)系的數(shù)據(jù),可以定義兩個(gè)reader,分別為contrast()和view(),然后通過(guò)預(yù)定義的reader decorator緩存并組合這些數(shù)據(jù),在對(duì)合并后的數(shù)據(jù)進(jìn)行亂序操作。源碼見(jiàn)decorator.py

          data = paddle.reader.shuffle(        paddle.reader.compose(            paddle.reader(contradt(contrast_path),buf_size = 100),            paddle.reader(view(view_path),buf_size = 200),            500)

             

            這樣有一個(gè)很大的好處,就是組合特征來(lái)訓(xùn)練變得更容易了!傳統(tǒng)的跑模型的方法是,確定label和feature,盡可能多的找合適的feature扔到模型里去訓(xùn)練,這樣我們就需要做一張大表,訓(xùn)練完后我們可以分析某些特征的重要性然后重新增加或減少一些feature來(lái)進(jìn)行訓(xùn)練,這樣我們有需要對(duì)原來(lái)的label-feature表進(jìn)行修改,如果數(shù)據(jù)量小沒(méi)啥影響,就是麻煩點(diǎn),但是數(shù)據(jù)量大的話(huà)需要每一次增加feature,和主鍵、label來(lái)join的操作都會(huì)很耗時(shí),如果采取這種方式的話(huà),我們可以對(duì)某些同一類(lèi)的特征做成一張表,數(shù)據(jù)存放的地址存為一個(gè)變量名,每次跑模型的時(shí)候想選取幾類(lèi)特征,就創(chuàng)建幾個(gè)reader,用reader decorator 組合起來(lái),最后再shuffle灌倒模型里去訓(xùn)練。這!樣!是!不!是!很!方!便!

            如果沒(méi)理解,我舉一個(gè)實(shí)例,假設(shè)我們要預(yù)測(cè)用戶(hù)是否會(huì)買(mǎi)車(chē),label是買(mǎi)車(chē) or 不買(mǎi)車(chē),feature有瀏覽車(chē)系、對(duì)比車(chē)系、關(guān)注車(chē)系的功能偏好等等20個(gè),傳統(tǒng)的思維是做成這樣一張表:


           如果想要減少feature_2,看看feature_2對(duì)模型的準(zhǔn)確率影響是否很大,那么我們需要在這張表里去掉這一列,想要增加一個(gè)feature的話(huà),也需要在feature里增加一列,如果用reador decorator的話(huà),我們可以這樣做數(shù)據(jù)集:

           把相同類(lèi)型的feature放在一起,不用頻繁的join減少時(shí)間,一共做四個(gè)表,創(chuàng)建4個(gè)reador:


          data = paddle.reader.shuffle(

                      paddle.reader.compose(

                          paddle.reader(table1(table1_path),buf_size = 100),

                          paddle.reader(table2(table2_path),buf_size = 100),

                          paddle.reader(table3(table3_path),buf_size = 100),

                          paddle.reader(table4(table4_path),buf_size = 100),

                      500)


           如果新發(fā)現(xiàn)了一個(gè)特征,想嘗試這個(gè)特征對(duì)模型提高準(zhǔn)確率有沒(méi)有用,可以再單獨(dú)把這個(gè)特征數(shù)據(jù)提取出來(lái),再增加一個(gè)reader,用reader decorator組合起來(lái),shuffle后放入模型里跑就行了。

           


           

          PaddlePaddle的數(shù)據(jù)預(yù)處理實(shí)例

            還是以手寫(xiě)數(shù)字為例,對(duì)數(shù)據(jù)進(jìn)行處理后并劃分train和test,只需要4步即可:

          1.指定數(shù)據(jù)地址


          import paddle.v2.dataset.common

          import subprocess

          import numpy

          import platform

          __all__ = ['train', 'test', 'convert']


          URL_PREFIX = 'http://yann.lecun.com/exdb/mnist/'

          TEST_IMAGE_URL = URL_PREFIX + 't10k-images-idx3-ubyte.gz'

          TEST_IMAGE_MD5 = '9fb629c4189551a2d022fa330f9573f3'

          TEST_LABEL_URL = URL_PREFIX + 't10k-labels-idx1-ubyte.gz'

          TEST_LABEL_MD5 = 'ec29112dd5afa0611ce80d1b7f02629c'

          TRAIN_IMAGE_URL = URL_PREFIX + 'train-images-idx3-ubyte.gz'

          TRAIN_IMAGE_MD5 = 'f68b3c2dcbeaaa9fbdd348bbdeb94873'

          TRAIN_LABEL_URL = URL_PREFIX + 'train-labels-idx1-ubyte.gz'

          TRAIN_LABEL_MD5 = 'd53e105ee54ea40749a09fcbcd1e9432'

           

          2.創(chuàng)建reader creator


          def reader_creator(image_filename, label_filename, buffer_size):

              # 創(chuàng)建一個(gè)reader

              def reader():

                  if platform.system() == 'Darwin':

                      zcat_cmd = 'gzcat'

                  elif platform.system() == 'Linux':

                      zcat_cmd = 'zcat'

                  else:

                      raise NotImplementedError()


                  m = subprocess.Popen([zcat_cmd, image_filename], stdout=subprocess.PIPE)

                  m.stdout.read(16)  


                  l = subprocess.Popen([zcat_cmd, label_filename], stdout=subprocess.PIPE)

                  l.stdout.read(8)  


                  try:  # reader could be break.

                      while True:

                          labels = numpy.fromfile(

                              l.stdout, 'ubyte', count=buffer_size).astype('int')


                          if labels.size != buffer_size:

                              break  # numpy.fromfile returns empty slice after EOF.


                          images = numpy.fromfile(

                              m.stdout, 'ubyte', count=buffer_size * 28 * 28).reshape(

                                  (buffer_size, 28 * 28)).astype('float32')


                          images = images / 255.0 * 2.0 - 1.0


                          for i in xrange(buffer_size):

                              yield images[i, :], int(labels[i])

                  finally:

                      m.terminate()

                      l.terminate()


              return reader


          3.創(chuàng)建訓(xùn)練集和測(cè)試集


          def train():

              '''

              創(chuàng)建mnsit的訓(xùn)練集 reader creator

              返回一個(gè)reador creator,每個(gè)reader里的樣本都是圖片的像素值,在區(qū)間[0,1]內(nèi),label為0~9

              返回:training reader creator

              '''

              return reader_creator(

                  paddle.v2.dataset.common.download(TRAIN_IMAGE_URL, 'mnist',

                                                    TRAIN_IMAGE_MD5),

                  paddle.v2.dataset.common.download(TRAIN_LABEL_URL, 'mnist',

                                                    TRAIN_LABEL_MD5), 100)



          def test():

              '''

              創(chuàng)建mnsit的測(cè)試集 reader creator

              返回一個(gè)reador creator,每個(gè)reader里的樣本都是圖片的像素值,在區(qū)間[0,1]內(nèi),label為0~9

              返回:testreader creator

              '''

              return reader_creator(

                  paddle.v2.dataset.common.download(TEST_IMAGE_URL, 'mnist',

                                                    TEST_IMAGE_MD5),

                  paddle.v2.dataset.common.download(TEST_LABEL_URL, 'mnist',

                                                    TEST_LABEL_MD5), 100)


          4.下載數(shù)據(jù)并轉(zhuǎn)換成相應(yīng)格式


          def fetch():

              paddle.v2.dataset.common.download(TRAIN_IMAGE_URL, 'mnist', TRAIN_IMAGE_MD5)

              paddle.v2.dataset.common.download(TRAIN_LABEL_URL, 'mnist', TRAIN_LABEL_MD5)

              paddle.v2.dataset.common.download(TEST_IMAGE_URL, 'mnist', TEST_IMAGE_MD5)

              paddle.v2.dataset.common.download(TEST_LABEL_URL, 'mnist', TRAIN_LABEL_MD5)



          def convert(path):

              '''

              將數(shù)據(jù)格式轉(zhuǎn)換為 recordio format

              '''

              paddle.v2.dataset.common.convert(path, train(), 1000, 'minist_train')

              paddle.v2.dataset.common.convert(path, test(), 1000, 'minist_test')


           如果想換成自己的訓(xùn)練數(shù)據(jù),只需要按照步驟改成自己的數(shù)據(jù)地址,創(chuàng)建相應(yīng)的reader creator(或者reader decorator)即可。

           

            這是圖像的例子,如果我們想訓(xùn)練一個(gè)文本模型,做一個(gè)情感分析,這個(gè)時(shí)候如何處理數(shù)據(jù)呢?步驟也很簡(jiǎn)單。

            假設(shè)我們有一堆數(shù)據(jù),每一行為一條樣本,以 \t 分隔,第一列是類(lèi)別標(biāo)簽,第二列是輸入文本的內(nèi)容,文本內(nèi)容中的詞語(yǔ)以空格分隔。以下是兩條示例數(shù)據(jù):

          positive        今天終于試了自己理想的車(chē) 外觀(guān)太騷氣了 而且中控也很棒negative       這臺(tái)車(chē)好貴 而且還費(fèi)油 性?xún)r(jià)比太低了

            現(xiàn)在開(kāi)始做數(shù)據(jù)預(yù)處理

            1.創(chuàng)建reader


          def train_reader(data_dir, word_dict, label_dict):

              def reader():

                  UNK_ID = word_dict['']

                  word_col = 0

                  lbl_col = 1


                  for file_name in os.listdir(data_dir):

                      with open(os.path.join(data_dir, file_name), 'r') as f:

                          for line in f:

                              line_split = line.strip().split('\t')

                              word_ids = [

                                  word_dict.get(w, UNK_ID)

                                  for w in line_split[word_col].split()

                              ]

                              yield word_ids, label_dict[line_split[lbl_col]]


              return reader


          返回類(lèi)型為: paddle.data_type.integer_value_sequence(詞語(yǔ)在字典的序號(hào))和 paddle.data_type.integer_value(類(lèi)別標(biāo)簽)

            2.組合讀取方式

          train_reader = paddle.batch(
          paddle.reader.shuffle(
          reader.train_reader(train_data_dir, word_dict, lbl_dict),
          buf_size=1000),
          batch_size=batch_size)

            

          完整的代碼如下(加上了劃分train和test部分):


          import os

          def train_reader(data_dir, word_dict, label_dict):

              '''

             創(chuàng)建訓(xùn)練數(shù)據(jù)reader

              :param data_dir: 數(shù)據(jù)地址.

              :type data_dir: str

              :param word_dict: 詞典地址,

                  詞典里必須有 'UNK' .

              :type word_dict:python dict

              :param label_dict: label 字典的地址

              :type label_dict: Python dict

              '''

              def reader():

                  UNK_ID = word_dict['']

                  word_col = 1

                  lbl_col = 0

                  for file_name in os.listdir(data_dir):

                      with open(os.path.join(data_dir, file_name), 'r') as f:

                          for line in f:

                              line_split = line.strip().split('\t')

                              word_ids = [

                                  word_dict.get(w, UNK_ID)

                                  for w in line_split[word_col].split()

                              ]

                              yield word_ids, label_dict[line_split[lbl_col]]

              return reader

          def test_reader(data_dir, word_dict):

              '''

              創(chuàng)建測(cè)試數(shù)據(jù)reader

              :param data_dir: 數(shù)據(jù)地址.

              :type data_dir: str

              :param word_dict: 詞典地址,

                  詞典里必須有 'UNK' .

              :type word_dict:python dict

              '''

              def reader():

                  UNK_ID = word_dict['']

                  word_col = 1


                  for file_name in os.listdir(data_dir):

                      with open(os.path.join(data_dir, file_name), 'r') as f:

                          for line in f:

                              line_split = line.strip().split('\t')

                              if len(line_split) < word_col:="">

                              word_ids = [

                                  word_dict.get(w, UNK_ID)

                                  for w in line_split[word_col].split()

                              ]

                              yield word_ids, line_split[word_col]

              return reader


           總結(jié) 

            這篇文章主要講了在paddlepaddle里如何加載自己的數(shù)據(jù)集,轉(zhuǎn)換成相應(yīng)的格式,并劃分train和test。我們?cè)谑褂靡粋€(gè)框架的時(shí)候通常會(huì)先去跑幾個(gè)簡(jiǎn)單的demo,但是如果不用常見(jiàn)的demo的數(shù)據(jù),自己做一個(gè)實(shí)際的項(xiàng)目,完整的跑通一個(gè)模型,這才代表我們掌握了這個(gè)框架的基本應(yīng)用知識(shí)。跑一個(gè)模型第一步就是數(shù)據(jù)預(yù)處理,在paddlepaddle里,提供的方式非常簡(jiǎn)單,但是有很多優(yōu)點(diǎn):

          •   shuffle數(shù)據(jù)非常方便

          •   可以將數(shù)據(jù)組合成batch訓(xùn)練

          •   可以利用reader decorator來(lái)組合多個(gè)reader,提高組合特征運(yùn)行模型的效率

          •   可以多線(xiàn)程讀取數(shù)據(jù)

            而我之前使用過(guò)mxnet來(lái)訓(xùn)練車(chē)牌識(shí)別的模型,50w的圖片數(shù)據(jù)想要一次訓(xùn)練是非常慢的,這樣的話(huà)就有兩個(gè)解決方法:一是批量訓(xùn)練,這一點(diǎn)大多數(shù)的框架都會(huì)有, 二是轉(zhuǎn)換成mxnet特有的rec格式,提高讀取效率,可以通過(guò)im2rec.py將圖片轉(zhuǎn)換,比較麻煩,如果是tesnorflow,也有相對(duì)應(yīng)的特定格式tfrecord,這幾種方式各有優(yōu)劣,從易用性上,paddlepaddle是比較簡(jiǎn)單的。

            這篇文章沒(méi)有與上篇銜接起來(lái),因?yàn)榭吹接泻脦追忄]件都有問(wèn)怎么自己加載數(shù)據(jù)訓(xùn)練,所以就決定插入一節(jié)先把這個(gè)寫(xiě)了。下篇文章我們接著講CNN的進(jìn)階知識(shí)。下周見(jiàn)^_^!

          本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
          打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
          猜你喜歡
          類(lèi)似文章
          paddlepaddle訓(xùn)練網(wǎng)絡(luò)的基本流程一(入門(mén)示例)
          PaddlePaddle入門(mén):從對(duì)話(huà)系統(tǒng)中的情感分析談起
          【paddlepaddle速成】paddlepaddle圖像分類(lèi)從模型自定義到測(cè)試
          PaddlePaddle
          決策樹(shù)分類(lèi)算法
          專(zhuān)欄 | 在PaddlePaddle上實(shí)現(xiàn)MNIST手寫(xiě)體數(shù)字識(shí)別
          更多類(lèi)似文章 >>
          生活服務(wù)
          熱點(diǎn)新聞
          分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
          綁定賬號(hào)成功
          后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
          如果VIP功能使用有故障,
          可點(diǎn)擊這里聯(lián)系客服!

          聯(lián)系客服