简体   繁体   中英

ValueError: Tensor conversion requested dtype float32_ref for Tensor with dtype float32

Embedding matrix:

    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

The model training looks like this -

    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)

Error is -

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)'

Full stack trace -

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)'

It was a version mismatch issue. Solved by reinstalling both keras and tensorflow.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM