l2_all = l2(0) # 0.0001
dropoutRate = 0.25
filters = 256
inputs = tf.keras.Input(shape=(64, 210))
# inputs_cnn = tf.keras.layers.Dropout(0.1)(inputs)
# dr = tf.keras.layers.Dropout(0.2)(inputs) , kernel_regularizer=l2_all
# inputs_cnn = tf.keras.layers.Conv1D(filters=256, kernel_size=1, padding='causal', activation='gelu',
# dilation_rate=1, kernel_initializer='he_normal', kernel_regularizer=l2_all)(inputs_cnn)
# inputs_cnn = tf.keras.layers.LayerNormalization()(inputs_cnn)
# -----1
cnn1 = tf.keras.layers.Conv1D(filters=filters, kernel_size=3, padding='causal',
dilation_rate=1, kernel_initializer='he_normal', kernel_regularizer=l2_all)(inputs)
cnn1 = tf.keras.layers.Activation('gelu')(cnn1)
cnn1 = tf.keras.layers.LayerNormalization()(cnn1)
cnn1 = tf.keras.layers.Dropout(dropoutRate)(cnn1)
cnn1 = tf.keras.layers.Conv1D(filters=filters, kernel_size=3, padding='causal',
dilation_rate=1, kernel_initializer='he_normal', kernel_regularizer=l2_all)(cnn1)
cnna = tf.keras.layers.Conv1D(filters=filters, kernel_size=1, padding='causal',
dilation_rate=1, kernel_initializer='he_normal', kernel_regularizer=l2_all)(inputs)
add1 = tf.add(cnn1, cnna)
add1 = tf.keras.layers.Activation('gelu')(add1)
add1 = tf.keras.layers.LayerNormalization()(add1)
add1 = tf.keras.layers.Dropout(dropoutRate)(add1)
# -----2
cnn1 = tf.keras.layers.Conv1D(filters=filters, kernel_size=3, padding='causal',
dilation_rate=2, kernel_initializer='he_normal', kernel_regularizer=l2_all)(add1)
cnn1 = tf.keras.layers.Activation('gelu')(cnn1)
cnn1 = tf.keras.layers.LayerNormalization()(cnn1)
cnn1 = tf.keras.layers.Dropout(dropoutRate)(cnn1)
cnn1 = tf.keras.layers.Conv1D(filters=filters, kernel_size=3, padding='causal',
dilation_rate=2, kernel_initializer='he_normal', kernel_regularizer=l2_all)(cnn1)
cnna = tf.keras.layers.Conv1D(filters=filters, kernel_size=1, padding='causal',
dilation_rate=1, kernel_initializer='he_normal', kernel_regularizer=l2_all)(inputs)
add1 = tf.add(cnn1, cnna)
add1 = tf.keras.layers.Activation('gelu')(add1)
add1 = tf.keras.layers.LayerNormalization()(add1)
add1 = tf.keras.layers.Dropout(dropoutRate)(add1)
# ----4
cnn1 = tf.keras.layers.Conv1D(filters=filters, kernel_size=3, padding='causal',
dilation_rate=4, kernel_initializer='he_normal', kernel_regularizer=l2_all)(add1)
cnn1 = tf.keras.layers.Activation('gelu')(cnn1)
cnn1 = tf.keras.layers.LayerNormalization()(cnn1)
cnn1 = tf.keras.layers.Dropout(dropoutRate)(cnn1)
cnn1 = tf.keras.layers.Conv1D(filters=filters, kernel_size=3, padding='causal',
dilation_rate=4, kernel_initializer='he_normal', kernel_regularizer=l2_all)(cnn1)
cnna = tf.keras.layers.Conv1D(filters=filters, kernel_size=1, padding='causal',
dilation_rate=1, kernel_initializer='he_normal', kernel_regularizer=l2_all)(inputs)
add1 = tf.add(cnn1, cnna)
add1 = tf.keras.layers.Activation('gelu')(add1)
add1 = tf.keras.layers.LayerNormalization()(add1)
add1 = tf.keras.layers.Dropout(dropoutRate)(add1)
# ----8
cnn1 = tf.keras.layers.Conv1D(filters=filters, kernel_size=3, padding='causal',
dilation_rate=8, kernel_initializer='he_normal', kernel_regularizer=l2_all)(add1)
cnn1 = tf.keras.layers.Activation('gelu')(cnn1)
cnn1 = tf.keras.layers.LayerNormalization()(cnn1)
cnn1 = tf.keras.layers.Dropout(dropoutRate)(cnn1)
cnn1 = tf.keras.layers.Conv1D(filters=filters, kernel_size=3, padding='causal',
dilation_rate=8, kernel_initializer='he_normal', kernel_regularizer=l2_all)(cnn1)
cnna = tf.keras.layers.Conv1D(filters=filters, kernel_size=1, padding='causal',
dilation_rate=1, kernel_initializer='he_normal', kernel_regularizer=l2_all)(inputs)
add1 = tf.add(cnn1, cnna)
add1 = tf.keras.layers.Activation('gelu')(add1)
add1 = tf.keras.layers.LayerNormalization()(add1)
add1 = tf.keras.layers.Dropout(dropoutRate)(add1)
# ---16
cnn1 = tf.keras.layers.Conv1D(filters=filters, kernel_size=3, padding='causal',
dilation_rate=16, kernel_initializer='he_normal', kernel_regularizer=l2_all)(add1)
cnn1 = tf.keras.layers.Activation('gelu')(cnn1)
cnn1 = tf.keras.layers.LayerNormalization()(cnn1)
cnn1 = tf.keras.layers.Dropout(dropoutRate)(cnn1)
cnn1 = tf.keras.layers.Conv1D(filters=filters, kernel_size=3, padding='causal',
dilation_rate=16, kernel_initializer='he_normal', kernel_regularizer=l2_all)(cnn1)
cnna = tf.keras.layers.Conv1D(filters=filters, kernel_size=1, padding='causal',
dilation_rate=1, kernel_initializer='he_normal', kernel_regularizer=l2_all)(inputs)
add1 = tf.add(cnn1, cnna)
add1 = tf.keras.layers.Activation('gelu')(add1)
add1 = tf.keras.layers.LayerNormalization()(add1)
add1 = tf.keras.layers.Dropout(dropoutRate)(add1)
# ----32
cnn1 = tf.keras.layers.Conv1D(filters=filters, kernel_size=3, padding='causal',
dilation_rate=32, kernel_initializer='he_normal', kernel_regularizer=l2_all)(add1)
cnn1 = tf.keras.layers.Activation('gelu')(cnn1)
cnn1 = tf.keras.layers.LayerNormalization()(cnn1)
cnn1 = tf.keras.layers.Dropout(dropoutRate)(cnn1)
cnn1 = tf.keras.layers.Conv1D(filters=filters, kernel_size=3, padding='causal',
dilation_rate=32, kernel_initializer='he_normal', kernel_regularizer=l2_all)(cnn1)
cnna = tf.keras.layers.Conv1D(filters=filters, kernel_size=1, padding='causal',
dilation_rate=1, kernel_initializer='he_normal', kernel_regularizer=l2_all)(inputs)
add1 = tf.add(cnn1, cnna)
add1 = tf.keras.layers.Activation('gelu')(add1)
add1 = tf.keras.layers.LayerNormalization()(add1)
add1 = tf.keras.layers.Dropout(dropoutRate)(add1)
# ----lstm1
lstm1 = tf.keras.layers.LSTM(filters, return_sequences=True, kernel_regularizer=l2_all)(add1)
lstm1 = tf.keras.layers.LayerNormalization()(lstm1)
lstm1 = tf.keras.layers.Dropout(dropoutRate)(lstm1)
# -----lstm2
lstm1 = tf.keras.layers.LSTM(filters, return_sequences=True, kernel_regularizer=l2_all)(lstm1)
# ----
cnna = tf.keras.layers.Conv1D(filters=filters, kernel_size=1, padding='causal',
dilation_rate=1, kernel_initializer='he_normal', kernel_regularizer=l2_all)(inputs)
add1 = tf.add(lstm1, cnna)
add1 = tf.keras.layers.LayerNormalization()(add1)
add1 = tf.keras.layers.Dropout(dropoutRate)(add1)
ma1 = tf.keras.layers.MultiHeadAttention(num_heads=16, key_dim=64, kernel_regularizer=l2_all, dropout=0.1)(add1, add1) # 0.2
cnna = tf.keras.layers.Conv1D(filters=filters, kernel_size=1, padding='causal',
dilation_rate=1, kernel_initializer='he_normal', kernel_regularizer=l2_all)(inputs)
ma1 = tf.keras.layers.Dropout(dropoutRate)(ma1)
add1 = tf.add(ma1, cnna)
add1 = tf.keras.layers.LayerNormalization()(add1)
dense = tf.keras.layers.Dense(4096, activation='gelu', kernel_regularizer=l2_all)(add1)
dense = tf.keras.layers.Dropout(dropoutRate)(dense)
dense = tf.keras.layers.Dense(1024, kernel_regularizer=l2_all)(dense)
cnna = tf.keras.layers.Conv1D(filters=1024, kernel_size=1, padding='causal',
dilation_rate=1, kernel_initializer='he_normal', kernel_regularizer=l2_all)(inputs)
dense = tf.keras.layers.Dropout(dropoutRate)(dense)
add1 = tf.add(dense, cnna)
add1 = tf.keras.layers.LayerNormalization()(add1)
# fl1 = tf.keras.layers.Flatten()(add1)
gp1 = tf.keras.layers.GlobalMaxPooling1D()(add1)
ap1 = tf.keras.layers.GlobalAveragePooling1D()(add1)
cat1 = tf.concat([gp1, ap1], axis=1)
cat1 = tf.keras.layers.Dropout(0.25)(cat1)
out = tf.keras.layers.Dense(8, activation='linear', kernel_regularizer=l2_all)(cat1) # linear
model = tf.keras.models.Model(inputs=inputs, outputs=out)
model.summary()
optimizer = keras.optimizers.Adadelta(learning_rate=2.0,rho=0.95,epsilon=1e-8)
上面这个时序8分类的模型合理吗?有需要改进的地方吗?