这是 Siamese LSTM 神经网络:
first_masking_layer = Masking(mask_value=0.0)
first_lstm_layer = LSTM(46, return_sequences=True, recurrent_dropout=0.75, kernel_regularizer=l2(1e-4), kernel_initializer='he_normal')
first_bacth_norm = BatchNormalization()
first_dropout_layer = Dropout(0.75)
reference_input_layer = Input(shape=(23, None))
reference_input_processed = first_masking_layer(reference_input_layer)
reference_input_processed = first_lstm_layer(reference_input_processed)
reference_input_processed = first_bacth_norm(reference_input_processed)
reference_input_processed = first_dropout_layer(reference_input_processed)
query_input_layer = Input(shape=(23, None))
query_input_processed = first_masking_layer(query_input_layer)
query_input_processed = first_lstm_layer(query_input_processed)
query_input_processed = first_bacth_norm(query_input_processed)
query_input_processed = first_dropout_layer(query_input_processed)
concat_layer = concatenate([reference_input_processed, query_input_processed])
masking_layer = Masking(mask_value=0.0)(concat_layer)
lstm_layer = LSTM(23, return_sequences=False, recurrent_dropout=0.7, kernel_regularizer=l2(1e-4), kernel_initializer='he_normal')(masking_layer)
lstm_layer = BatchNormalization()(lstm_layer)
lstm_layer = Dropout(0.75)(lstm_layer)
prediction = Dense(2, activation="softmax")(lstm_layer)
siamese_net = Model(inputs=[reference_input_layer, query_input_layer], outputs=prediction)
print(siamese_net.summary())
opt = Nadam(lr=2e-3)
siamese_net.compile(optimizer=opt, loss='binary_crossentropy', metrics=['acc'])
history_of_model = siamese_net.fit([x_train_left, x_train_right], y_train, epochs=10, verbose=1, validation_split=0.2, shuffle=True, batch_size=64)
siamese_net.save(model_name)
该模型接受两个在线签名,原始签名和查询(原始或伪造),并输出查询签名是否真实。运行代码时,出现以下错误reference_input_processed
:
TypeError: '>' not supported between instances of 'NoneType' and 'float'
我认为这是由于输入形状是(23, None)
. 数据没有填充,因此我有None
形状。
有没有办法解决这个错误,还是必须填充数据?