【问题标题】:Tensorflow Keras TypeError: object of type 'NoneType' has no len()Tensorflow Keras TypeError:“NoneType”类型的对象没有len()
【发布时间】:2021-02-09 10:46:33
【问题描述】:
import tensorflow as tf
import tensorflow.keras.layers as nn
import numpy as np

class Base(tf.keras.Model):
    def __init__(self):
        super(Base, self).__init__()
        
        self.user_emb = nn.Embedding(20000, 128, input_length=1)
        self.item_emb = nn.Embedding(10000, 128, input_length=1)

        self.test_dense = nn.Dense(80, activation=None)
        self.final_dense = nn.Dense(1)

    def call(self, inputs, **kwargs):
        user, item = inputs
        user_emb = self.user_emb(user)
        item_emb = self.item_emb(item)

        join_emb = tf.concat([user_emb, item_emb], -1)

        logit = self.test_dense(join_emb)
        logit = tf.squeeze(self.final_dense(logit))
        output = tf.nn.sigmoid(logit)

        return output

# Main
if __name__ == '__main__':

    model = Base()
    model.compile(loss='binary_crossentropy', optimizer='adam',
                  metrics=[])

    a = np.random.randint(1,20000,size=(10000))
    b = np.random.randint(1, 10000, size=(10000))
    y = np.random.randint(0, 2, size=(10000))
    X = [a, b]
    model.fit(X, y, epochs=1, batch_size=32)

当我运行上面的代码时,我得到了

TypeError:“NoneType”类型的对象没有 len()。

我使用 TensorFlow 2.0.0,python 3.6

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    我将我的 Tensorflow 版本降级为 2.0.0 并运行产生相同错误的代码。

    当我升级到 2.4.1 版本时,它工作得非常好。

    你可以像这样升级 TensorFlow:

    pip install tensorflow==2.4.1
    

    【讨论】:

    • 谢谢!我找到了解决方案。当我删除最后一层的 tf.squeeze() 时,它工作正常。
    【解决方案2】:

    解决办法是去掉最后一层的tf.squeeze()。

    【讨论】:

      猜你喜欢
      • 2021-03-03
      • 2015-07-30
      • 1970-01-01
      • 2018-08-14
      • 2016-06-06
      • 2018-06-11
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多