байесовская ошибка conv1d: преобразование тензора запрошено dtype float32 для Tensor с dtype int64: - PullRequest
2 голосов
/ 12 июля 2020

вот моя форма ввода:

>>>X_train.shape # features
>>>(82724, 3, 32)

>>>Y_train.shape # labels
>>>(82724,)

и некоторый пример:

X_train[1]

array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4,
        5, 5, 5, 5, 5, 1, 1, 1, 1, 1],
       [1, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
Y_train

array([0, 1, 1, ..., 0, 1, 1])

Я пытаюсь использовать байесовский conv1d с сайта тензорного потока и Я не знаю, работает ли он для двоичной классификации и как адаптировать его к моему вводу. вот как я его изменил:

model = tf.keras.Sequential([
    tf.keras.layers.Reshape([3, 32]),
    tfp.layers.Convolution1DFlipout(
        64, kernel_size=5, padding='SAME', activation=tf.nn.relu),
    tf.keras.layers.Flatten(),
    tfp.layers.DenseFlipout(1),
])


logits = model(X_train)
neg_log_likelihood = tf.nn.softmax_cross_entropy_with_logits(
    labels=Y_train, logits=logits)
kl = sum(model.losses)
loss = neg_log_likelihood + kl
train_op = tf.train.AdamOptimizer().minimize(loss)

model.compile(optimizer = train_op , metrics = ['mse'])
model.summary()

Вот ошибка, которую я получаю:

       WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_probability/python/layers/util.py:106: Layer.add_variable (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.
Instructions for updating:
Please use `layer.add_weight` method instead.
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-f4705a46a464> in <module>()
      8 
      9 
---> 10 logits = model(X_train)
     11 neg_log_likelihood = tf.nn.softmax_cross_entropy_with_logits(
     12     labels=Y_train, logits=logits)

5 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer.py in __call__(self, *args, **kwargs)
    966           with base_layer_utils.autocast_context_manager(
    967               self._compute_dtype):
--> 968             outputs = self.call(cast_inputs, *args, **kwargs)
    969           self._handle_activity_regularization(inputs, outputs)
    970           self._set_mask_metadata(inputs, outputs, input_masks)

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/sequential.py in call(self, inputs, training, mask)
    289         kwargs['training'] = training
    290 
--> 291       outputs = layer(inputs, **kwargs)
    292 
    293       if len(nest.flatten(outputs)) != 1:

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer.py in __call__(self, *args, **kwargs)
    966           with base_layer_utils.autocast_context_manager(
    967               self._compute_dtype):
--> 968             outputs = self.call(cast_inputs, *args, **kwargs)
    969           self._handle_activity_regularization(inputs, outputs)
    970           self._set_mask_metadata(inputs, outputs, input_masks)

/usr/local/lib/python3.6/dist-packages/tensorflow_probability/python/layers/conv_variational.py in call(self, inputs)
    227 
    228   def call(self, inputs):
--> 229     inputs = tf.convert_to_tensor(value=inputs, dtype=self.dtype)
    230 
    231     outputs = self._apply_variational_kernel(inputs)

/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py in convert_to_tensor_v2(value, dtype, dtype_hint, name)
   1281       name=name,
   1282       preferred_dtype=dtype_hint,
-> 1283       as_ref=False)
   1284 
   1285 

/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py in convert_to_tensor(value, dtype, name, as_ref, preferred_dtype, dtype_hint, ctx, accepted_result_types)
   1315       raise ValueError(
   1316           "Tensor conversion requested dtype %s for Tensor with dtype %s: %r" %
-> 1317           (dtype.name, value.dtype.name, value))
   1318     return value
   1319 

ValueError: Tensor conversion requested dtype float32 for Tensor with dtype int64: <tf.Tensor: shape=(82724, 3, 32), dtype=int64, numpy=
array([[[0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0]],

       [[0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0]],

       [[0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0]],

       ...,

       [[0, 0, 0, ..., 2, 5, 0],
        [0, 0, 0, ..., 3, 3, 3],
        [3, 3, 3, ..., 0, 0, 0]],

       [[0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0]],

       [[0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [1, 1, 1, ..., 0, 0, 0]]])>

Я пытался изменить dtype массивов, но это, похоже, ничего не изменило. как я могу это исправить? спасибо

1 Ответ

1 голос
/ 02 сентября 2020

Замените эту строку:

testLabels = data_test.score

на:

testLabels = data_test.score.astype(np.float32)

Таким образом, оба параметра correlation_coefficient будут float32.

...