def ED_TCN_atrous(n_nodes, conv_len, n_classes, n_feat, max_len,
loss='categorical_crossentropy', causal=False,
optimizer="rmsprop", activation='norm_relu',
return_param_str=False):
n_layers = len(n_nodes)
inputs = Input(shape=(None,n_feat))
model = inputs
# ---- Encoder ----
for i in range(n_layers):
# Pad beginning of sequence to prevent usage of future data
if causal: model = ZeroPadding1D((conv_len//2,0))(model)
model = AtrousConvolution1D(n_nodes[i], conv_len, atrous_rate=i+1, border_mode='same')(model)
if causal: model = Cropping1D((0,conv_len//2))(model)
model = SpatialDropout1D(0.3)(model)
if activation=='norm_relu':
model = Activation('relu')(model)
model = Lambda(channel_normalization, name="encoder_norm_{}".format(i))(model)
elif activation=='wavenet':
model = WaveNet_activation(model)
else:
model = Activation(activation)(model)
# ---- Decoder ----
for i in range(n_layers):
if causal: model = ZeroPadding1D((conv_len//2,0))(model)
model = AtrousConvolution1D(n_nodes[-i-1], conv_len, atrous_rate=n_layers-i, border_mode='same')(model)
if causal: model = Cropping1D((0,conv_len//2))(model)
model = SpatialDropout1D(0.3)(model)
if activation=='norm_relu':
model = Activation('relu')(model)
model = Lambda(channel_normalization, name="decoder_norm_{}".format(i))(model)
elif activation=='wavenet':
model = WaveNet_activation(model)
else:
model = Activation(activation)(model)
# Output FC layer
model = TimeDistributed(Dense(n_classes, activation="softmax" ))(model)
model = Model(input=inputs, output=model)
model.compile(loss=loss, optimizer=optimizer, sample_weight_mode="temporal", metrics=['accuracy'])
if return_param_str:
param_str = "ED-TCNa_C{}_L{}".format(conv_len, n_layers)
if causal:
param_str += "_causal"
return model, param_str
else:
return model
tf_models.py 文件源码
python
阅读 19
收藏 0
点赞 0
评论 0
评论列表
文章目录