NER建立模型時出現concat tensors不匹配問題

1 問題描述

    在建立NER識別模型時出現:

        TypeError: Tensors in list passed to 'values' of 'ConcatV2' Op have types [bool, float32] that don't all match.       

        

 

2 分析問題

    我們仔細看報錯語句,可以看到真正報錯的語句爲:return tf.concat([to_dense(x) for x in tensors], axis)

        

    我們找到這行代碼:

        

    進行斷點調試:

          

    可以看到確實存在兩個tensor的值類型不一致。

    回過頭再來看報錯的語句:

          TypeError: Tensors in list passed to 'values' of 'ConcatV2' Op have types [bool, float32] that don't all match.   

          這句話的意思是:傳給concatV2操作的values值有兩種類型,一直是bool類型,一種是float32類型。 

    從實際代碼來看就是下面這一句:

        

    但是上面兩個tensor值是哪裏傳過來的呢?

    經過調試,發現是從mask傳過來的值:

        

    bool類型的值是mask,float32類型的值是zeros_like的返回值。

 

3 解決問題

    於是我們將建立模型時的參數:

        model.add(Embedding(len(self.vocab), self.Embedding_dim, mask_zero=True))

    改爲:

        model.add(Embedding(len(self.vocab), self.Embedding_dim, mask_zero=False))

    於是,代碼可以正常運行了:

     

 

4 問題總結

    (1) 需要認真看每一條報錯信息對應代碼;

    (2) 打斷點調試到報錯的語句,查看相應的數據值;

    (3) 懷疑是原始數據的問題導致,mask_zero不能設置爲True,有待進一步分析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章