bert4keras
bert4keras copied to clipboard
ImportError: cannot import name 'Loss'
提问时请尽可能提供如下信息:
基本信息
- 你使用的操作系统: Windows 10
- 你使用的Python版本: 3.6.2
- 你使用的Tensorflow版本: 1.14.0
- 你使用的Keras版本: 2.2.4
- 你使用的bert4keras版本: 0.10.6 (0.9.6~0.10.6都是一样的错)
- 你使用纯keras还是tf.keras: 纯keras
- 你加载的预训练模型: chinese_roberta_wwm_ext_L-12_H-768_A-12
################################################ ########from bert4keras.layers import Loss就报错了 ####### ################################################
核心代码
# 请在此处贴上你的核心代码。
# 请尽量只保留关键部分,不要无脑贴全部代码。
from __future__ import print_function
import os
import numpy as np
from bert4keras.backend import keras, K
from bert4keras.layers import Loss
from bert4keras.models import build_transformer_model
from bert4keras.tokenizers import Tokenizer, load_vocab
from bert4keras.optimizers import Adam
from bert4keras.snippets import sequence_padding, open
from bert4keras.snippets import DataGenerator, AutoRegressiveDecoder
from keras.models import Model
..
..
..
class CrossEntropy(Loss):
"""交叉熵作为loss,并mask掉输入部分
"""
def compute_loss(self, inputs, mask=None):
y_true, y_mask, y_pred = inputs
y_true = y_true[:, 1:] # 目标token_ids
y_mask = y_mask[:, 1:] # segment_ids,刚好指示了要预测的部分
y_pred = y_pred[:, :-1] # 预测序列,错开一位
loss = K.sparse_categorical_crossentropy(y_true, y_pred)
loss = K.sum(loss * y_mask) / K.sum(y_mask)
return loss
纯复用的你提供的seq2seq的例子。最奇怪的事情是,有些机器能跑起来。
输出信息
# 请在此处贴上你的调试输出

自我尝试
不管什么问题,请先尝试自行解决,“万般努力”之下仍然无法解决再来提问。此处请贴上你的努力过程。 ###说明:尝试了各种组合环境情况,还是这个错,不给我Import。
能是啥问题呢?郁闷
实在没有办法,出去吃了个苹果。
回来找其他人的能运行的代码看看看,偶然发现,把他的代码直接复制到我的文件里,直接就报错了。
立刻想到,是不是我的文件路径有问题。我是把代码文件放在“seq2seq”的文件夹下,改了名字后,果然可以了。
泪流满面。
所以真的是“seq2seq”的文件名问题吗?还没有探究是什么原因。和库中有冲突?
我也没碰到过这么奇怪的问题~