TensorFlow - вход "split_dim" в "Split" Op имеет тип float32, который не соответствует ожидаемому типу int32

Я установил shadoworflow, используя pip на ubuntu 16.04 LTS, при запуске этого кода https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/recurrent_network.py я получаю эту ошибку

Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes. 
Extracting /tmp/data/train-images-idx3-ubyte.gz 
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes. Extracting /tmp/data/train-labels-idx1-ubyte.gz 
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes. 
Extracting /tmp/data/t10k-images-idx3-ubyte.gz
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes. 
Extracting /tmp/data/t10k-labels-idx1-ubyte.gz 
Traceback (most recent call last): 
    File "deep.py", line 71, in <module>
        pred = RNN(x, weights, biases)   
    File "deep.py", line 60, in RNN
        x = tf.split(x, n_steps, 0)   
    File "/home/newuser/.local/lib/python2.7/site-packages/tensorflow/python/ops/array_ops.py", line 1234, in split
        name=name)   
    File "/home/newuser/.local/lib/python2.7/site-packages/tensorflow/python/ops/gen_array_ops.py", line 3241, in _split
    num_split=num_split, name=name)   
    File "/home/newuser/.local/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 508, in apply_op
    (prefix, dtypes.as_dtype(input_arg.type).name)) 
TypeError: Input 'split_dim' of 'Split' Op has type float32 that does not match expected type of int32.

Ответ 1

Похоже, вы используете более старую версию Tensorflow и должны обновляться до Tensorflow v0.12.0 или выше. Ошибка, которую вы получаете, указывает на то, что значение split_dim в вашей функции tf.split ожидает целое число, но получает тензор x, который имеет тип float32.

Это происходит потому, что в версиях Tensorflow < 0.12.0 функция split принимает аргументы как:

x = tf.split(0, n_steps, x) # tf.split(axis, num_or_size_splits, value)

Учебник, из которого вы работаете, был написан для версий > 0.12.0, который был изменен так, чтобы он соответствовал синтаксису split:

x = tf.split(x, n_steps, 0) # tf.split(value, num_or_size_splits, axis)

Подробнее см. в списке изменений: https://github.com/tensorflow/tensorflow/blob/64edd34ce69b4a8033af5d217cb8894105297d8a/RELEASE.md