[英]tf.keras - Apply specific layers only to specific features
我會更好地解釋:我想將 model 中的一些層應用於某些特征,在其他特征上使用其他層,最后在一些最終層上使用這兩個層的輸出。
特別是:我有一個包含一些分類特征的數據集,我有一個熱編碼,然后是代表 10 年的 50 個其他數字列(每個具有相同的 5 個特征)。
我想做的是:
我的問題是:*如何將 go 的某些特定功能放入某些特定層,以及如何將這些層的 output(以及其他分析其他功能)引導到一些最終層,這些層應該收集從以前的?
我希望我足夠清楚。 非常感謝那些會回答的人。
編輯:
這是我到目前為止所做的,請告訴我您是否可以提出如何改進它的建議。
附言。 輸入數據是 100% 的正確形狀。
cat_in = k.layers.Input(shape=(X_train_p3.shape[1],), name='cat_in')
num_in = k.layers.Input(shape=(X_train_m.shape[1], X_train_m.shape[2]), name='num_in')
ovr_in = k.layers.Input(shape=(X_train_f.shape[1],), name='ovr_in')
a = k.layers.Dense(128, activation='relu', kernel_regularizer=l1(.1),
bias_regularizer=l1(.1), kernel_initializer='he_uniform')(cat_in)
a = k.layers.Dropout(.2)(a)
a = k.layers.Dense(64, activation='relu', kernel_regularizer=l1(.1),
bias_regularizer=l1(.1), kernel_initializer='he_uniform')(a)
a = k.layers.Dropout(.2)(a)
a = k.layers.Dense(64, activation='relu', kernel_regularizer=l1(.1),
bias_regularizer=l1(.1), kernel_initializer='he_uniform')(a)
b = k.layers.LSTM(128, activation='tanh', return_sequences=True, kernel_regularizer=l1(.1),
bias_regularizer=l1(.1), kernel_initializer='glorot_uniform')(num_in) #original --> needs changes?
b = k.layers.Dropout(.15)(b)
b = k.layers.LSTM(64, activation='tanh', return_sequences=True, kernel_regularizer=l1(.1),
bias_regularizer=l1(.1), kernel_initializer='he_uniform')(b)
b = k.layers.Dropout(.15)(b)
b = k.layers.LSTM(64, activation='tanh', kernel_regularizer=l1(.1),
bias_regularizer=l1(.1), kernel_initializer='he_uniform')(b)
b = k.layers.Dropout(.15)(b)
b = k.layers.Dense(64, activation='relu', kernel_regularizer=l1(.1),
bias_regularizer=l1(.1), kernel_initializer='he_uniform')(b)
b = k.layers.Dropout(.15)(b)
b = k.layers.Dense(64, activation='relu', kernel_regularizer=l1(.1),
bias_regularizer=l1(.1), kernel_initializer='he_uniform')(b)
c = k.layers.Dense(128, activation='relu', kernel_regularizer=l1(.1),
bias_regularizer=l1(.1), kernel_initializer='he_uniform')(ovr_in)
c = k.layers.Dropout(.2)(c)
c = k.layers.Dense(64, activation='relu', kernel_regularizer=l1(.1),
bias_regularizer=l1(.1), kernel_initializer='he_uniform')(c)
c = k.layers.Dropout(.2)(c)
c = k.layers.Dense(64, activation='relu', kernel_regularizer=l1(.1),
bias_regularizer=l1(.1), kernel_initializer='he_uniform')(c)
d = k.layers.concatenate([a, b, c])
d = k.layers.Dense(192, activation='relu', kernel_regularizer=l1(.1),
bias_regularizer=l1(.1), kernel_initializer='he_uniform')(d)
d = k.layers.Dropout(.2)(d)
d = k.layers.Dense(64, activation='relu', kernel_regularizer=l1(.1),
bias_regularizer=l1(.1), kernel_initializer='he_uniform')(d)
d = k.layers.Dropout(.2)(d)
d = k.layers.Dense(64, activation='relu', kernel_regularizer=l1(.1),
bias_regularizer=l1(.1), kernel_initializer='he_uniform')(d)
out = k.layers.Dense(1)(d)
model = k.models.Model(inputs=[cat_in, num_in, ovr_in], outputs=out)
model.compile(optimizer=k.optimizers.Adam(learning_rate=.001, beta_1=.999, beta_2=.9999),
loss='mse',
metrics=['mae'])
early_stop = k.callbacks.EarlyStopping(monitor='val_mae', patience=100, restore_best_weights=True)
lr_callback = k.callbacks.ReduceLROnPlateau(monitor='val_mae', factor=.1**.5, patience=20, min_lr=1e-9)
Pps:增加神經元的數量並不會帶來改善。
我想為您提供一個虛擬示例
n_sample = 100
cat_feat = 30
dense_feat = 50
lstm_timestep = 20
X_cat = np.random.randint(0,2, (n_sample,cat_feat))
X_dense = np.random.uniform(0,1, (n_sample, lstm_timestep, dense_feat))
y = np.random.uniform(0,1, n_sample)
print(X_cat.shape, X_dense.shape)
inp_cat = Input((cat_feat))
x_cat = Dense(64, activation='relu')(inp_cat)
inp_dense = Input((lstm_timestep, dense_feat))
x_dense = LSTM(32, activation='relu')(inp_dense)
concat = Concatenate()([x_cat, x_dense])
x = Dense(32, activation='relu')(concat)
out = Dense(1)(x)
model = Model([inp_cat,inp_dense], out)
model.compile('adam', 'mse')
model.fit([X_cat,X_dense],y, epochs=10)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.