bert4keras
bert4keras copied to clipboard
转onnx格式出现错误
提问时请尽可能提供如下信息:
基本信息
- 你使用的操作系统: Ubuntu 16.04.6
- 你使用的Python版本: 3.6
- 你使用的Tensorflow版本: 1.12.0
- 你使用的Keras版本: 2.2.4
- 你使用的bert4keras版本: 0.7.0
- 你使用纯keras还是tf.keras: keras
- 你加载的预训练模型:bert
核心代码
def on_epoch_end(self, epoch, logs=None):
val_acc = evaluate(valid_generator)
if val_acc > self.best_val_acc:
self.best_val_acc = val_acc
import keras2onnx
onnx_model = keras2onnx.convert_keras(model, model.name)
keras2onnx.save_model(onnx_model, 'bert.onnx')
model.save_weights('best_model.weights')
输出信息
AssertionError: Tensor Transformer-11-MultiHeadSelfAttention-Add/All:0 already processed```
这个我也不懂,只能等其他了解的朋友看到的话帮忙解答一下了
有进展吗?最近也遇到了这个问题
same here
遇到相同的问题,我的环境
python3.6
tensorflow==1.15
onnx==1.6.0
keras2onnx==1.7.0
onnxconverter-common==1.7.0
有人解决这个问题吗
请问现在有解决这个问题吗?
我也遇到这个问题,不过用另一种方式解决了。 https://blog.csdn.net/hailongzhang26/article/details/118937909
我也遇到这个问题,不过用另一种方式解决了。 https://blog.csdn.net/hailongzhang26/article/details/118937909
您好,按照您的方法已经成功跑通,实现cpu下使用onnx推理。但是发现速度变得特别慢,比直接使用keras调用predict方法慢了很多。您有遇到这类问题吗?
我的任务是匹配任务
class TheseusONNX:
def __init__(self, weights):
self.sess = onnxruntime.InferenceSession(weights)
self.max_seg_len = maxlen
self.tokenizer = tokenizer
def rank_batch(self, query, answer_list, batch_size=128):
'''
预测批量句子的类别与置信度
'''
results = []
# label赋值为1,也可以赋值其他的值
texts = [(1, query, answer) for answer in answer_list]
texts_generator = data_generator(texts, batch_size)
for index, (x_true, y_true) in enumerate(texts_generator):
input_dict = {'Successor-Input-Segment': x_true[1].tolist(), "Successor-Input-Token": x_true[0].tolist()}
time_start = time.time()
scores_pred = self.sess.run(None, input_dict)[0]
time_end = time.time()
print("one query cost {} s".format(time_end-time_start))
# 获取预测为1的概率
for score in scores_pred:
results.append(score[1])
return results