第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用數(shù)據(jù)集生成器的 Tensorflow model.fit()

使用數(shù)據(jù)集生成器的 Tensorflow model.fit()

慕勒3428872 2021-12-17 16:53:16
我正在使用數(shù)據(jù)集 API 生成訓練數(shù)據(jù)并將其分類為 NN 的批次。這是我的代碼的最小工作示例:import tensorflow as tfimport numpy as npimport randomdef my_generator():    while True:        x = np.random.rand(4, 20)        y = random.randint(0, 11)        label = tf.one_hot(y, depth=12)        yield x.reshape(4, 20, 1), labeldef my_input_fn():    dataset = tf.data.Dataset.from_generator(lambda: my_generator(),                                             output_types=(tf.float64, tf.int32))    dataset = dataset.batch(32)    iterator = dataset.make_one_shot_iterator()    batch_features, batch_labels = iterator.get_next()    return batch_features, batch_labelsif __name__ == "__main__":    tf.enable_eager_execution()    model = tf.keras.Sequential([tf.keras.layers.Flatten(input_shape=(4, 20, 1)),                                 tf.keras.layers.Dense(128, activation=tf.nn.relu),                                 tf.keras.layers.Dense(12, activation=tf.nn.softmax)])    model.compile(optimizer='adam',                  loss='categorical_crossentropy',                  metrics=['accuracy'])    data_generator = my_input_fn()    model.fit(data_generator)但batch_size不是 的公認關(guān)鍵字fit_generator()。我對這些錯誤消息感到困惑,如果有人能對它們有所了解,或者指出我做錯了什么,我將不勝感激。
查看完整描述

1 回答

?
FFIVE

TA貢獻1797條經(jīng)驗 獲得超6個贊

雖然錯誤的根源仍然模糊不清,但我已經(jīng)找到了使代碼工作的解決方案。我會把它貼在這里,以防它對處于類似情況的任何人有用。


基本上,我將其更改my_input_fn()為生成器并使用model.fit_generator()如下:


import tensorflow as tf

import numpy as np

import random



def my_generator(total_items):

    i = 0

    while i < total_items:

        x = np.random.rand(4, 20)

        y = random.randint(0, 11)

        label = tf.one_hot(y, depth=12)

        yield x.reshape(4, 20, 1), label

        i += 1


def my_input_fn(total_items, epochs):

    dataset = tf.data.Dataset.from_generator(lambda: my_generator(total_items),

                                             output_types=(tf.float64, tf.int64))


    dataset = dataset.repeat(epochs)

    dataset = dataset.batch(32)



    iterator = dataset.make_one_shot_iterator()

    while True:

        batch_features, batch_labels = iterator.get_next()

        yield batch_features, batch_labels


if __name__ == "__main__":

    tf.enable_eager_execution()


    model = tf.keras.Sequential([tf.keras.layers.Flatten(input_shape=(4, 20, 1)),

                                 tf.keras.layers.Dense(64, activation=tf.nn.relu),

                                 tf.keras.layers.Dense(12, activation=tf.nn.softmax)])


    model.compile(optimizer='adam',

                  loss='categorical_crossentropy',

                  metrics=['accuracy'])


    total_items = 200

    batch_size = 32

    epochs = 10

    num_batches = int(total_items/batch_size)

    train_data_generator = my_input_fn(total_items, epochs)

    model.fit_generator(generator=train_data_generator, steps_per_epoch=num_batches, epochs=epochs, verbose=1)

編輯


正如 giser_yugang 在評論中暗示的那樣,也可以將其my_input_fn()作為返回dataset而不是單個批次的函數(shù)來執(zhí)行。


def my_input_fn(total_items, epochs):

    dataset = tf.data.Dataset.from_generator(lambda: my_generator(total_items),

                                             output_types=(tf.float64, tf.int64))


    dataset = dataset.repeat(epochs)

    dataset = dataset.batch(32)

    return dataset


if __name__ == "__main__":

    tf.enable_eager_execution()


    model = tf.keras.Sequential([tf.keras.layers.Flatten(input_shape=(4, 20, 1)),

                                 tf.keras.layers.Dense(64, activation=tf.nn.relu),

                                 tf.keras.layers.Dense(12, activation=tf.nn.softmax)])


    model.compile(optimizer='adam',

                  loss='categorical_crossentropy',

                  metrics=['accuracy'])


    total_items = 100

    batch_size = 32

    epochs = 10

    num_batches = int(total_items/batch_size)

    dataset = my_input_fn(total_items, epochs)

    model.fit_generator(dataset, epochs=epochs, steps_per_epoch=num_batches)

這些方法之間似乎沒有任何平均性能差異。


查看完整回答
反對 回復 2021-12-17
  • 1 回答
  • 0 關(guān)注
  • 271 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號