ValueError:张量转换请求dtype float32_ref为具有dtype float32的Tensor

时间:2020-07-02 06:40:47

标签: python pandas numpy tensorflow keras

嵌入矩阵:

    def create_embedding_matrix(filepath, word_index, embedding_dim):
        vocab_size = len(word_index) + 1  
        # Adding again 1 because of reserved 0 index
        embedding_matrix = np.zeros((vocab_size, embedding_dim))
    
        with open(filepath) as f:
            for line in f:
                # word, *vector = line.split()
                # word, vector = re.split('', line)[0], re.split('', line)[1:]
                # word, vector = (lambda x,*y:(x, y))(*line.split())
                arr = line.split()
                word = arr[0]
                vector = arr[1:]
                if word in word_index:
                    idx = word_index[word] 
                    embedding_matrix[idx] = np.array(vector, dtype=np.float32)[:embedding_dim]
    
        return vocab_size, embedding_matrix

模型训练如下所示-

    def model_training(vocab_size, embedding_dim, X_train, y_train, X_test, y_test, maxlen):
        # embedding_dim = 100
        model = Sequential()
        model.add(layers.Embedding(vocab_size, embedding_dim, input_length=maxlen))
        model.add(layers.Conv1D(128, 5, activation='relu'))
        model.add(layers.GlobalMaxPooling1D())
        model.add(layers.Dense(10, activation='relu'))
        model.add(layers.Dense(1, activation='sigmoid'))
        model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
        history = model.fit(X_train, y_train, epochs=10, validation_data=(X_test, y_test), batch_size=10) 

    df = load_sentence_data_2C()
    maxlen = 100
    vocab_size, tokenizer, X_train, y_train, X_test, y_test  = sentence_tokenizer(df, maxlen)
    embedding_dim = 50
    vocab_size, embedding_matrix = create_embedding_matrix('data/glove.6B.50d.txt', tokenizer.word_index, embedding_dim)
    embedding_dim = 100
    model_training(vocab_size, embedding_dim, X_train, y_train, X_test, y_test, maxlen)

错误是-

ValueError:张量转换请求Tensor的dtype float32_ref 使用dtype float32: 'Tensor(“ Adam / embedding_1 / embeddings / m / Initializer / zeros:0”, shape =(1747,100),dtype = float32)'

完整堆栈跟踪-

Instructions for updating:
Use tf.where in 2.0, which has the same broadcast rule as np.where
Traceback (most recent call last):
  File "deeplearning/utils_exp.py", line 86, in <module>
    model_training(vocab_size, embedding_dim, X_train, y_train, X_test, y_test, maxlen)        
  File "deeplearning/utils_exp.py", line 77, in model_training
    history = model.fit(X_train, y_train, epochs=10, validation_data=(X_test, y_test), batch_size=10)    
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/keras/engine/training.py", line 1010, in fit
    self._make_train_function()
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/keras/engine/training.py", line 509, in _make_train_function
    loss=self.total_loss)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py", line 497, in get_updates
    return [self.apply_gradients(grads_and_vars)]
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py", line 435, in apply_gradients
    self._create_slots(var_list)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tensorflow/python/keras/optimizer_v2/adam.py", line 145, in _create_slots
    self.add_slot(var, 'm')
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py", line 578, in add_slot
    initial_value=initial_value)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variables.py", line 261, in __call__
    return cls._variable_v2_call(*args, **kwargs)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variables.py", line 255, in _variable_v2_call
    shape=shape)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variables.py", line 236, in <lambda>
    previous_getter = lambda **kws: default_variable_creator_v2(None, **kws)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 2544, in default_variable_creator_v2
    shape=shape)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variables.py", line 263, in __call__
    return super(VariableMetaclass, cls).__call__(*args, **kwargs)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/resource_variable_ops.py", line 460, in __init__
    shape=shape)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/resource_variable_ops.py", line 605, in _init_from_args
    name="initial_value", dtype=dtype)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1087, in convert_to_tensor
    return convert_to_tensor_v2(value, dtype, preferred_dtype, name)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1145, in convert_to_tensor_v2
    as_ref=False)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1224, in internal_convert_to_tensor
    ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1018, in _TensorTensorConversionFunction
    (dtype.name, t.dtype.name, str(t)))
ValueError: Tensor conversion requested dtype float32_ref for Tensor with dtype float32: 'Tensor("Adam/embedding_1/embeddings/m/Initializer/zeros:0", shape=(1747, 100), dtype=float32)'

1 个答案:

答案 0 :(得分:0)

这是版本不匹配的问题。通过重新安装keras和tensorflow来解决。