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

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

為什么重塑我的數(shù)據(jù)會完全改變 Keras 中完全連接的神經(jīng)網(wǎng)絡的行為?

為什么重塑我的數(shù)據(jù)會完全改變 Keras 中完全連接的神經(jīng)網(wǎng)絡的行為?

狐的傳說 2023-03-08 15:08:08
我希望對此有所了解。我正在使用簡單的神經(jīng)網(wǎng)絡處理 Keras 中的回歸問題。我有訓練和測試數(shù)據(jù),訓練數(shù)據(jù)由 33230 個樣本組成,具有 20020 個特征(對于這個數(shù)據(jù)量來說,這是一大堆特征,但那是另一回事了——特征只是各種測量)。測試集是 8308 個具有相同數(shù)量特征的樣本。我的數(shù)據(jù)在 pandas 數(shù)據(jù)框中,我將其轉換為看起來符合預期的 numpy 數(shù)組:X_train = np.array(X_train_df)X_train.shape(33230, 20020)X_test = np.array(X_test_df)X_test.shape(8308, 20020)如果我將其傳遞到以下完全連接的模型中,它會非??焖俚赜柧?,并在測試集上產(chǎn)生糟糕的結果:模型:model = Sequential()model.add(Dense(300, activation="relu", input_shape=(20020,)))model.add(Dense(300, activation="relu"))model.add(Dense(100, activation="relu"))model.add(Dense(1, activation='linear'))model.compile(optimizer='adam', loss='mse',  metrics=['mean_absolute_error'])合身:model.fit(x=X_train, y=y_train, validation_data=(X_test,  y_test), batch_size=128, shuffle=True, epochs=100)5 個 epoch 后的結果(此后基本沒有變化,訓練損失下降,驗證損失猛增):Train on 33230 samples, validate on 8308 samplesEpoch 1/10033230/33230 [==============================] - 11s 322us/sample - loss: 217.6460 - mean_absolute_error: 9.6896 - val_loss: 92.2517 - val_mean_absolute_error: 7.6400Epoch 2/10033230/33230 [==============================] - 10s 308us/sample - loss: 70.0501 - mean_absolute_error: 7.0170 - val_loss: 90.1813 - val_mean_absolute_error: 7.5721Epoch 3/10033230/33230 [==============================] - 10s 309us/sample - loss: 62.5253 - mean_absolute_error: 6.6401 - val_loss: 104.1333 - val_mean_absolute_error: 8.0131Epoch 4/10033230/33230 [==============================] - 11s 335us/sample - loss: 55.6250 - mean_absolute_error: 6.2346 - val_loss: 142.8665 - val_mean_absolute_error: 9.3112Epoch 5/10033230/33230 [==============================] - 10s 311us/sample - loss: 51.7378 - mean_absolute_error: 5.9570 - val_loss: 208.8995 - val_mean_absolute_error: 11.4158但是,如果我重塑數(shù)據(jù):X_test = X_test.reshape(8308, 20020, 1)X_train = X_train.reshape(33230, 20020, 1)
查看完整描述

1 回答

?
一只名叫tom的貓

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

一個很好的問題。首先,您必須了解網(wǎng)絡的實際工作原理。Dense層是一個完全連接的層,因此每個神經(jīng)元都將與前一層的神經(jīng)元建立連接?,F(xiàn)在您提到的網(wǎng)絡性能變慢1000x與您的訓練數(shù)據(jù)無關,而與您的網(wǎng)絡有關。你的第二個網(wǎng)絡太大了,我無法將它放入我的 RAM 中,也無法放入 Google Colab 中。因此,出于演示目的,我會認為您的訓練數(shù)據(jù)是有(500, 100)形狀的。


對于您發(fā)布的采用上述形狀的第一個網(wǎng)絡,您的模型網(wǎng)絡如下所示:


model = Sequential()

model.add(Dense(300, activation="relu", input_shape=(100,)))

model.add(Dense(300, activation="relu"))

model.add(Dense(100, activation="relu"))

model.add(Dense(1, activation='linear'))

model.compile(optimizer='adam', loss='mse',  metrics=['mean_absolute_error'])



Model: "sequential_1"

_________________________________________________________________

Layer (type)                 Output Shape              Param #   

=================================================================

dense_2 (Dense)              (None, 300)               30300     

_________________________________________________________________

dense_3 (Dense)              (None, 300)               90300     

_________________________________________________________________

dense_4 (Dense)              (None, 100)               30100     

_________________________________________________________________

dense_5 (Dense)              (None, 1)                 101       

=================================================================

Total params: 150,801

Trainable params: 150,801

Non-trainable params: 0

_________________________________________________________________

記下 Total 參數(shù),它是150,801. 現(xiàn)在,如果我們以你的第二個例子為例。


model1 = Sequential()

model1.add(Dense(300, activation="relu", input_shape=(100,1)))

model1.add(Flatten())

model1.add(Dense(300, activation="relu"))

model1.add(Dense(100, activation="relu"))

model1.add(Dense(1, activation='linear'))

model1.compile(optimizer='adam', loss='mse',  metrics=['mean_absolute_error'])


Model: "sequential_4"

_________________________________________________________________

Layer (type)                 Output Shape              Param #   

=================================================================

dense_14 (Dense)             (None, 100, 300)          600       

_________________________________________________________________

flatten_2 (Flatten)          (None, 30000)             0         

_________________________________________________________________

dense_15 (Dense)             (None, 300)               9000300   

_________________________________________________________________

dense_16 (Dense)             (None, 100)               30100     

_________________________________________________________________

dense_17 (Dense)             (None, 1)                 101       

=================================================================

Total params: 9,031,101

Trainable params: 9,031,101

Non-trainable params: 0

_________________________________________________________________

您的總參數(shù)增加到9,031,101. 當您使用具有 length 的實際數(shù)據(jù)時,您可以想象20020。你的模型像任何東西一樣增加,我什至無法在我的 RAM 中安裝該模型。


因此總而言之,與第一個模型相比,您的第二個模型具有大量參數(shù)。這可能是訓練緩慢而性能更好的原因?更多的參數(shù)使學習更好。如果不實際查看您的數(shù)據(jù),就不能說是什么讓它變得更好。但是更多的參數(shù)可以帶來更好的性能。


注意:如果您刪除該Flatten層,您的網(wǎng)絡參數(shù)將減少,這是示例。


model1 = Sequential()

model1.add(Dense(300, activation="relu", input_shape=(100,1)))

model1.add(Dense(300, activation="relu"))

model1.add(Dense(100, activation="relu"))

model1.add(Dense(1, activation='linear'))

model1.compile(optimizer='adam', loss='mse',  metrics=['mean_absolute_error'])


Model: "sequential_5"

_________________________________________________________________

Layer (type)                 Output Shape              Param #   

=================================================================

dense_18 (Dense)             (None, 100, 300)          600       

_________________________________________________________________

dense_19 (Dense)             (None, 100, 300)          90300     

_________________________________________________________________

dense_20 (Dense)             (None, 100, 100)          30100     

_________________________________________________________________

dense_21 (Dense)             (None, 100, 1)            101       

=================================================================

Total params: 121,101

Trainable params: 121,101

Non-trainable params: 0

_________________________________________________________________

我希望我的回答能幫助您了解正在發(fā)生的事情以及兩種模型之間的區(qū)別。


更新:20/07 對于您的評論,我認為最好更新答案以便更清楚。您的問題是——參數(shù)的數(shù)量與網(wǎng)絡的形狀有何關系?


老實說,我不太清楚你的意思。我仍然會嘗試回答它。添加的層或神經(jīng)元越多,網(wǎng)絡和可訓練參數(shù)的數(shù)量就會增加。


所以你的實際問題是為什么層會Flatten增加你的參數(shù)。為此,您需要了解如何計算參數(shù)。


model.add(Dense(300, activation="relu", input_shape=(100,)))

units *(input_size + 1)考慮這是你的第一層參數(shù)的數(shù)量30300?,F(xiàn)在你加層的時候Flatten,其實這本身并沒有增加你的參數(shù),而是層的輸出Flatten輸入到下一層。因此請考慮以下示例。


_________________________________________________________________

flatten_2 (Flatten)          (None, 30000)             0         

_________________________________________________________________

dense_15 (Dense)             (None, 300)               9000300   

_________________________________________________________________

在這里你可以看到層的輸出大小Flatten是30000. 現(xiàn)在考慮上面的公式,您可以看到300 *(30000 + 1)將產(chǎn)生9000300本身很重要的參數(shù)。更多數(shù)量的參數(shù)可以幫助學習更多的特征,并可能有助于獲得更好的結果。但這始終取決于數(shù)據(jù),您將不得不對其進行試驗。


我希望以上解釋可能已經(jīng)消除了您的疑慮。


查看完整回答
反對 回復 2023-03-08
  • 1 回答
  • 0 關注
  • 90 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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