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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Dataset.from_generator 無(wú)法復(fù)制 numpy 數(shù)組的功能作為 1D

Dataset.from_generator 無(wú)法復(fù)制 numpy 數(shù)組的功能作為 1D

泛舟湖上清波郎朗 2022-06-14 16:09:36
我將許多長(zhǎng)度為 100 和 3 個(gè)特征的時(shí)間序列輸入到 1D Convnet 中。我有太多這些無(wú)法使用 numpy 數(shù)組,因此我需要使用 Dataset.from_generator()。問(wèn)題是當(dāng)我在數(shù)據(jù)集上訓(xùn)練模型時(shí),它給出了錯(cuò)誤:expected conv1d_input to have 3 dimensions, but got array with shape (100, 3)下面的代碼演示了這個(gè)問(wèn)題。生成器將每個(gè)元素生成為預(yù)期的 (100,3) 數(shù)組。為什么模型無(wú)法將生成器輸出識(shí)別為有效?非常感謝您的幫助。朱利安import numpy as npimport tensorflow as tfdef create_timeseries_element():    # returns a random time series of 100 intervals, each with 3 features,    # and a random one-hot array of 5 entries    data = np.random.rand(100,3)    label = np.eye(5, dtype='int')[np.random.choice(5)]    return data, labeldef data_generator():    d, l = create_timeseries_element()    yield (d, l)model = tf.keras.models.Sequential([    tf.keras.layers.Conv1D(128, 9, activation='relu', input_shape=(100, 3)),    tf.keras.layers.Conv1D(128, 9, activation='relu'),    tf.keras.layers.MaxPooling1D(2),    tf.keras.layers.Conv1D(256, 5, activation='relu'),    tf.keras.layers.Conv1D(256, 5, activation='relu'),    tf.keras.layers.GlobalAveragePooling1D(),    tf.keras.layers.Dropout(0.5),    tf.keras.layers.Dense(5, activation='softmax')])model.compile(optimizer='adam',              loss='categorical_crossentropy',              metrics=['accuracy'])x_train = []y_train = []for _ in range(1000):    d, l = create_timeseries_element()    x_train.append(d)    y_train.append(l)x_train = np.array(x_train)y_train = np.array(y_train)# train model with numpy arrays - this worksmodel.fit(x=x_train, y=y_train)ds = tf.data.Dataset.from_generator(data_generator, output_types=(tf.float32, tf.int32),                                      output_shapes=(tf.TensorShape([100, 3]), tf.TensorShape([5])))# train model with dataset - this failsmodel.fit(ds)
查看完整描述

1 回答

?
慕哥9229398

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊

模型需要一批/樣本列表。您可以通過(guò)在創(chuàng)建數(shù)據(jù)集時(shí)簡(jiǎn)單地設(shè)置批處理屬性來(lái)做到這一點(diǎn),如下所示:


ds = tf.data.Dataset.from_generator(data_generator, output_types=(tf.float32, tf.int32),

                                      output_shapes=(tf.TensorShape([100, 3]), tf.TensorShape([5])))

ds = ds.batch(16)

您也可以在準(zhǔn)備樣品時(shí)采用另一種方式。這樣,您需要擴(kuò)展樣本維度,以便樣本充當(dāng)批次(您也可以傳遞樣本列表)并且您必須在output_shapes數(shù)據(jù)集和create_timeseries_element函數(shù)中進(jìn)行以下修改


def create_timeseries_element():

    # returns a random time series of 100 intervals, each with 3 features,

    # and a random one-hot array of 5 entries

    # Expand dimensions to create a batch of single sample

    data = np.expand_dims(np.random.rand(100, 3), axis=0)

    label = np.expand_dims(np.eye(5, dtype='int')[np.random.choice(5)], axis=0)

    return data, label


ds = tf.data.Dataset.from_generator(data_generator, output_types=(tf.float32, tf.int32), output_shapes=(tf.TensorShape([None, 100, 3]), tf.TensorShape([None, 5])))

上述更改將為數(shù)據(jù)集的每個(gè)時(shí)期僅提供一個(gè)批次(第一個(gè)解決方案的樣本)。您可以通過(guò)在定義數(shù)據(jù)集時(shí)將參數(shù)傳遞給data_generator函數(shù)來(lái)生成所需的批次(第一個(gè)解決方案的樣本)(例如 25 個(gè)),如下所示:


def data_generator(count=1):

    for _ in range(count):

        d, l = create_timeseries_element()

        yield (d, l)


ds = tf.data.Dataset.from_generator(data_generator, args=[25], output_types=(tf.float32, tf.int32), output_shapes=(tf.TensorShape([None, 100, 3]), tf.TensorShape([None, 5])))



查看完整回答
反對(duì) 回復(fù) 2022-06-14
  • 1 回答
  • 0 關(guān)注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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