Какие обновления keras делают ошибку этого простого кода? - PullRequest
1 голос
/ 26 марта 2019

Чтобы использовать multi-GPU, я обновляю версию keras (1.2.0 -> 2.2.4).Я не изменяю код, но есть ошибка.В чем причина этой ОШИБКИ?

Я прикрепил воспроизводимый код ниже.Как вы можете видеть, A & B имеют одинаковые формы, но только testB получил ошибку измерения.

> pip3 install keras==1.2.0 --user
> python test.py
Using TensorFlow backend.
Done

> pip3 install git+git://github.com/fchollet/keras.git --upgrade --user
> python test.py
Using TensorFlow backend.
test.py:26: UserWarning: Update your `Conv1D` call to the Keras 2 API: `Conv1D(128, 3, use_bias=False)`
  testA = keras.layers.Conv1D(128,3,bias=False)(A)
test.py:27: UserWarning: Update your `Conv1D` call to the Keras 2 API: `Conv1D(128, 3, use_bias=False)`
  testB = keras.layers.Conv1D(128,3,bias=False)(B)
Traceback (most recent call last):
  File "test.py", line 27, in <module>
    testB = keras.layers.Conv1D(128,3,bias=False)(B) 
  File "/home/nam/.local/lib/python3.6/site-packages/keras/engine/base_layer.py", line 457, in __call__
    output = self.call(inputs, **kwargs)
  File "/home/nam/.local/lib/python3.6/site-packages/keras/layers/convolutional.py", line 163, in call
    dilation_rate=self.dilation_rate[0])
  File "/home/nam/.local/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py", line 3881, in conv1d
    data_format=tf_data_format)
  File "/home/nam/.local/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 779, in convolution
    data_format=data_format)
  File "/home/nam/.local/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 839, in __init__
    filter_shape[num_spatial_dims]))
ValueError: number of input channels does not match corresponding dimension of filter, 1 != 1603

Это воспроизводимый код.

import keras

class AddSingletonDepth(keras.layers.Layer):

    def call(self, x, mask=None):
        x = keras.backend.expand_dims(x, -1)  # add a dimension of the right

        if keras.backend.ndim(x) == 4:
            return keras.backend.permute_dimensions(x, (0, 3, 1, 2))
        else:
            return x

    def get_output_shape_for(self, input_shape):
        if len(input_shape) == 3:
            return input_shape[0], 1, input_shape[1], input_shape[2]
        else:
            return input_shape[0], input_shape[1], 1


data = keras.engine.Input([1603])
A=keras.backend.expand_dims(data,-1)
B=AddSingletonDepth()(data)
testA = keras.layers.Conv1D(128,3,bias=False)(A)
testB = keras.layers.Conv1D(128,3,bias=False)(B) 
print('Done')

Я ожидаю, чтобы узнать причину ошибки.И мне действительно нравится использовать это построение как можно скорее, но если это невозможно, не могли бы вы показать мне, как исправить ошибку?

Спасибо.

...