Правильное использование функции Tensorflow tf.split в SKFlow
В документации по Skflow есть минимальный пример RNN. Входными данными является матрица с формой (4,5). Почему данные вводятся в соответствии со следующей функцией для ввода?:
def input_fn(X):
return tf.split(1, 5, X)
Эта функция возвращает список из 5 массивов с формой 4,1
[array([[ 2.],
[ 2.],
[ 3.],
[ 2.]], dtype=float32), array([[ 1.],
[ 2.],
[ 3.],
[ 4.]], dtype=float32), array([[ 2.],
[ 3.],
[ 1.],
[ 5.]], dtype=float32), array([[ 2.],
[ 4.],
[ 2.],
[ 4.]], dtype=float32), array([[ 3.],
[ 5.],
[ 1.],
[ 1.]], dtype=f
и какова разница / влияние на RNN между вышеуказанной функцией или определение функции, подобной этой? Поскольку обе функции ввода работают
def input_fn(X):
return tf.split(1, 1, X)
Который возвращает следующее:
[[[ 1., 3., 3., 2., 1.],
[ 2., 3., 4., 5., 6.]]
Представлено здесь:
testRNN(self):
random.seed(42)
import numpy as np
data = np.array(list([[2, 1, 2, 2, 3],
[2, 2, 3, 4, 5],
[3, 3, 1, 2, 1],
[2, 4, 5, 4, 1]]), dtype=np.float32)
# labels for classification
labels = np.array(list([1, 0, 1, 0]), dtype=np.float32)
# targets for regression
targets = np.array(list([10, 16, 10, 16]), dtype=np.float32)
test_data = np.array(list([[1, 3, 3, 2, 1], [2, 3, 4, 5, 6]]))
def input_fn(X):
return tf.split(1, 5, X)
# Classification
classifier = skflow.TensorFlowRNNClassifier(
rnn_size=2, cell_type='lstm', n_classes=2, input_op_fn=input_fn)
classifier.fit(data, labels)
classifier.weights_
classifier.bias_
predictions = classifier.predict(test_data)
self.assertAllClose(predictions, np.array([1, 0]))