我已经使用自定义的 f1 分数指标构建了一个顺序模型。我在我的模型编译过程中传递了它,然后以*.hdf5
格式保存它。每当我使用custom_objects
属性加载模型以进行测试时
model = load_model('app/model/test_model.hdf5', custom_objects={'f1':f1})
Keras 抛出以下错误
Run Code Online (Sandbox Code Playgroud)TypeError: '<' not supported between instances of 'function' and 'str'
注意:如果我在编译期间不包含 f1 指标,则不会显示任何错误,并且测试过程运行良好。
训练方法
from metrics import f1
...
# GRU with glove embeddings and two dense layers
model = Sequential()
model.add(Embedding(len(word_index) + 1,
100,
weights=[embedding_matrix],
input_length=max_len,
trainable=False))
model.add(SpatialDropout1D(0.3))
model.add(GRU(100, dropout=0.3, recurrent_dropout=0.3, return_sequences=True))
model.add(GRU(100, dropout=0.3, recurrent_dropout=0.3))
model.add(Dense(1024, activation='relu'))
#model.add(Dropout(0.8))
model.add(Dense(1024, activation='relu'))
#model.add(Dropout(0.8))
model.add(Dense(2))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc', f1])
# Fit the model with early stopping callback
earlystop …
Run Code Online (Sandbox Code Playgroud) 我试图理解应用于多个批次(本例中为 3 个)2D 输入形状 (6x6) 的 1D 卷积层的输出。
下面代码的输出是(4, 10, 32)
。对于前两个指数来说,这个答案非常简单。
filters
Conv1D 层中参数的实际作用是什么?对于我来说,该层如何操作最终输出(如下面的短语所述)并不是很直观。根据文档,这应该是输出形状
输出形状:3+D 张量,形状:batch_shape + (new_steps,filters) 步骤值可能由于填充或步幅而发生变化。
input_shape = (4, 10, 128)
x = tf.random.normal(input_shape)
y = tf.keras.layers.Conv1D(
32, 3, input_shape=input_shape[1:])(x)
print(y.shape) # (4, 10, 32)
Run Code Online (Sandbox Code Playgroud)