bert4keras icon indicating copy to clipboard operation
bert4keras copied to clipboard

ImportError: cannot import name 'Loss'

Open lcynju opened this issue 4 years ago • 2 comments

提问时请尽可能提供如下信息:

基本信息

  • 你使用的操作系统: 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的例子。最奇怪的事情是,有些机器能跑起来。

输出信息

# 请在此处贴上你的调试输出
![image](https://user-images.githubusercontent.com/3223671/118588024-30847600-b7d0-11eb-9573-046fb504632d.png)

自我尝试

不管什么问题,请先尝试自行解决,“万般努力”之下仍然无法解决再来提问。此处请贴上你的努力过程。 ###说明:尝试了各种组合环境情况,还是这个错,不给我Import。

能是啥问题呢?郁闷

lcynju avatar May 18 '21 03:05 lcynju

实在没有办法,出去吃了个苹果。

回来找其他人的能运行的代码看看看,偶然发现,把他的代码直接复制到我的文件里,直接就报错了。

立刻想到,是不是我的文件路径有问题。我是把代码文件放在“seq2seq”的文件夹下,改了名字后,果然可以了。

泪流满面。

所以真的是“seq2seq”的文件名问题吗?还没有探究是什么原因。和库中有冲突?

lcynju avatar May 18 '21 08:05 lcynju

我也没碰到过这么奇怪的问题~

bojone avatar May 21 '21 08:05 bojone