簡體   English   中英

如何將 tf.keras.layers.Normalization 用於模型中的多個特征

[英]How to use tf.keras.layers.Normalization for more than one feature inside the model

這個可重現的示例創建了一個基本回歸模型,在給定馬力的情況下預測 MPG(希望我可以提供鏈接)。 據我了解,這將特征馬力的轉換烘焙到模型的訓練中——也稱為“模型內部” 這很有吸引力,因為模型在評分/推理期間(例如在部署之后)對原始數據進行了必要的轉換(如果我誤解了,請糾正我)。 我想知道,當一個人有超過自變量時,如何實現這一點。 這取自上面引用的可重現代碼:

horsepower_normalizer = tf.keras.layers.Normalization(input_shape=[1, ], axis=None)
horsepower_normalizer.adapt(horsepower)

horsepower_normalizer = tf.keras.layers.Normalization(input_shape=[1, ], axis=None)
horsepower_normalizer.adapt(horsepower)

horsepower_model = Sequential([
    horsepower_normalizer,
    layers.Dense(units=1)
])

假設我們有一個數字特征X, Y, Z的列表,模型定義代碼是否可以基於此生成(例如,通過功能 API)? 任何指針都會非常受歡迎。 謝謝!

PS:

我目前正在嘗試學習 Keras + TF,理想情況下我希望標准化成為模式/培訓的一部分。 我使用非常簡陋的代碼(有待改進!)沿着這些思路:

train_data = pd.read_csv('train.csv')
val_data = pd.read_csv('val.csv')

target_name = 'ze_target'

y_train = train_data[target_name]
X_train = train_data.drop(target_name, axis=1)

y_val = train_data[target_name]
X_val = train_data.drop(target_name, axis=1)

def create_model():
    
    model = Sequential()
    model.add(Dense(20, input_dim=X.shape[1], activation='relu'))
    model.add(Dense(20, input_dim=X.shape[1], activation='relu'))
    model.add(Dense(20, input_dim=X.shape[1], activation='relu'))
    model.add(Dense(1))
    # Compile model
    model.compile(optimizer=Adam(learning_rate=0.0001), loss = 'mse')
    return model

model = create_model()
model.summary()

model.fit(X_train, y_train, validation_data=(X_val,y_val), batch_size=128, epochs=30)

您可以使用tf.concat並在 axis=1 上連接三個特征,然后對下面的三個特征使用tf.keras.layers.Normalization ,因為我們要對三個特征進行歸一化,請確保設置input_shape=(3,)axis=-1

import tensorflow as tf

x = tf.random.uniform((100, 1))
y = tf.random.uniform((100, 1))
z = tf.random.uniform((100, 1))

xyz = tf.concat([x, y, z], 1)

horsepower_normalizer = tf.keras.layers.Normalization(input_shape=(3,), axis=-1)
horsepower_normalizer.adapt(xyz)

horsepower_model = tf.keras.models.Sequential([
    horsepower_normalizer,
    tf.keras.layers.Dense(units=1)
])

horsepower_model(xyz)

輸出:

<tf.Tensor: shape=(100, 1), dtype=float32, numpy=
array([[-0.17135675],
       [-0.48248804],
       [-2.2847023 ],
       [-0.05702276],
       [ 2.9332483 ],
       [ 0.64826846],
       [-2.1490448 ],
       [-1.1697797 ],
       [-0.01030668],
            ...
       [-1.880199  ],
       [ 1.2854142 ],
       [-0.5471661 ]], dtype=float32)>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM