keras中国語ドキュメントノート10——データ前処理

10366 ワード

シーケンスプリプロセッシング


シーケンスpad_を塗りつぶすsequences

keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32',
    padding='pre', truncating='pre', value=0.)

長さnb_samplesのシーケンス(スカラーシーケンス)は、(nb_samples,nb_timesteps)2 D numpy arrayのような形に変換される.パラメータmaxlen,nb_が指定されている場合timesteps=maxlenです.そうしないと、その値は最長シーケンスの長さです.この長さより短い他のシーケンスは、その長さに達するために後部に0を充填します.nb_より長いtimestepsのシーケンスは、ターゲット長に一致するように切断されます.paddingと遮断の発生位置はそれぞれpaddingとtruncatingに依存する.

スキップskipgrams

keras.preprocessing.sequence.skipgrams(sequence, vocabulary_size, window_size=4, negative_samples=1., shuffle=True, categorical=False, sampling_table=None)

skipgramsは、単語ベクトルの下にあるシーケンスを次のペアtupleに変換します.
  • 正サンプルに対して、(word,word in the same window)
  • に変換
  • 負のサンプルに対して、(word,random word from the vocabulary)
  • に変換する
    【Tips】ウィキペディアによれば、n-gramは、所与のシーケンスで連続するn項目を表し、シーケンス文の場合、各項目が単語であり、n-gramはshinglesとも呼ばれる.skip-gramの普及では、skip-gramが生成したn項のサブシーケンスでは、各項目が元のシーケンスでは連続せず、k字ジャンプした.たとえば、文の場合:
    “the rain in Spain falls mainly on the plain”
    2-gramsはサブシーケンスの集合です.
    the rain,rain in,in Spain,Spain falls,falls mainly,mainly on,on the,the plain
    1-skip-2-gramsはサブシーケンスの集合です.
    the in, rain Spain, in falls, Spain mainly, falls on, mainly the, on plain. サンプリングテーブルmake_の取得sampling_table
    keras.preprocessing.sequence.make_sampling_table(size, sampling_factor=1e-5)

    この関数はskipgramsで必要なパラメータsampling_を生成するために使用されます.table.これはsizeのベクトルですsampling_table[i]は、データセットiでよく見られる語にサンプリングされる確率を表す(バランス期間のため、頻繁に現れる語ほど低い確率で採取される)

    テキストプリプロセッシング


    文分割text_to_word_sequence

    keras.preprocessing.text.text_to_word_sequence(text,filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t
    '
    ,lower=True,split=" ")

    この関数は、1つの文を単語構成のリストに分割します.

    one-hot符号化

    keras.preprocessing.text.one_hot(text,n,filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t
    '
    ,lower=True,split=" ")

    この関数は、one-hot形式のコードとしてテキストを符号化します.すなわち、辞書内の単語の下付き文字のみを記録します.
    【Tips】定義上、辞書長がnの場合、各単語はnのベクトルを形成しなければならない.ここで、単語自体が辞書に下付きの位置が1であり、残りはone-hotと呼ばれる.
    便宜上、関数はここで「1」の位置、すなわち辞書の中の語の下付き文字だけを記録する.

    フィーチャーハッシュtrick

    keras.preprocessing.text.hashing_trick(text,n,hash_function=None,filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t
    '
    ,lower=True,split=' ')

    テキストを固定サイズのハッシュ空間のインデックス・シーケンスに変換

    分詞器Tokenizer

    keras.preprocessing.text.Tokenizer(num_words=None,filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t
    '
    ,lower=True,split=" ",char_level=False)

    Tokenizerは、テキストを量子化したり、テキストをシーケンスに変換したりするためのクラス(すなわち、単語が辞書の下に表示されているリストで、1から計算されます).

    ピクチャプリプロセッシング


    画像ジェネレータImageDataGenerator

    keras.preprocessing.image.ImageDataGenerator(featurewise_center=False,
        samplewise_center=False,
        featurewise_std_normalization=False,
        samplewise_std_normalization=False,
        zca_whitening=False,
        rotation_range=0.,
        width_shift_range=0.,
        height_shift_range=0.,
        shear_range=0.,
        zoom_range=0.,
        channel_shift_range=0.,
        fill_mode='nearest',
        cval=0.,
        horizontal_flip=False,
        vertical_flip=False,
        rescale=None,
        preprocessing_function=None,
        data_format=K.image_data_format())

    batchの画像データを生成し、リアルタイムデータのアップグレードをサポートします.訓練時にこの関数は,所定のepoch回数に達するまで無限にデータを生成する.

    使用するflow()の例
    (x_train, y_train), (x_test, y_test) = cifar10.load_data()
    y_train = np_utils.to_categorical(y_train, num_classes)
    y_test = np_utils.to_categorical(y_test, num_classes)
    
    datagen = ImageDataGenerator(
        featurewise_center=True,
        featurewise_std_normalization=True,
        rotation_range=20,
        width_shift_range=0.2,
        height_shift_range=0.2,
        horizontal_flip=True)
    
    # compute quantities required for featurewise normalization
    # (std, mean, and principal components if ZCA whitening is applied)
    datagen.fit(x_train)
    
    # fits the model on batches with real-time data augmentation:
    model.fit_generator(datagen.flow(x_train, y_train, batch_size=32),
                        steps_per_epoch=len(x_train), epochs=epochs)
    
    # here's a more "manual" example
    for e in range(epochs):
        print 'Epoch', e
        batches = 0
        for x_batch, y_batch in datagen.flow(x_train, y_train, batch_size=32):
            loss = model.train(x_batch, y_batch)
            batches += 1
            if batches >= len(x_train) / 32:
                # we need to break the loop by hand because
                # the generator loops indefinitely
                break

    使用するflow_from_Directoryの例
    train_datagen = ImageDataGenerator(
            rescale=1./255,
            shear_range=0.2,
            zoom_range=0.2,
            horizontal_flip=True)
    
    test_datagen = ImageDataGenerator(rescale=1./255)
    
    train_generator = train_datagen.flow_from_directory(
            'data/train',
            target_size=(150, 150),
            batch_size=32,
            class_mode='binary')
    
    validation_generator = test_datagen.flow_from_directory(
            'data/validation',
            target_size=(150, 150),
            batch_size=32,
            class_mode='binary')
    
    model.fit_generator(
            train_generator,
            steps_per_epoch=2000,
            epochs=50,
            validation_data=validation_generator,
            validation_steps=800)

    画像とmaskを同時に変換
    # we create two instances with the same arguments
    data_gen_args = dict(featurewise_center=True,
                         featurewise_std_normalization=True,
                         rotation_range=90.,
                         width_shift_range=0.1,
                         height_shift_range=0.1,
                         zoom_range=0.2)
    image_datagen = ImageDataGenerator(**data_gen_args)
    mask_datagen = ImageDataGenerator(**data_gen_args)
    
    # Provide the same seed and keyword arguments to the fit and flow methods
    seed = 1
    image_datagen.fit(images, augment=True, seed=seed)
    mask_datagen.fit(masks, augment=True, seed=seed)
    
    image_generator = image_datagen.flow_from_directory(
        'data/images',
        class_mode=None,
        seed=seed)
    
    mask_generator = mask_datagen.flow_from_directory(
        'data/masks',
        class_mode=None,
        seed=seed)
    
    # combine generators into one which yields image and masks
    train_generator = zip(image_generator, mask_generator)
    
    model.fit_generator(
        train_generator,
        steps_per_epoch=2000,
        epochs=50)