Я пытаюсь использовать тензорный случайный лес, но получаю следующие параметры ошибки =

tf.contrib.tensor_forest.python.tensor_forest.ForestHParams(num_trees=100, max_nodes=1000,num_classes = len(le.classes_),num_features = 119)
classifier =tf.contrib.tensor_forest.client.random_forest.TensorForestEstimator(params)
classifier.fit(x=X_train, y=y_train)

ValueError: Tensor conversion requested dtype float32 for Tensor with dtype float64: 'Tensor("concat:0", shape=(?, 119), dtype=float64)'

Но это работает, когда я запускаю scikit-learn

clf = RandomForestClassifier(n_estimators=n_estms, n_jobs=n_jobs)
clf = clf.fit(X_train, y_train)

Обновление:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42)

Обновлено: пробовал этот стиль, но все еще не работает

input_fn  =  numpy_io.numpy_input_fn(
      x=X_train.astype(np.float32),
      y=y_train.astype(np.float32),
      num_epochs=None,
shuffle=True)
classifier.fit(input_fn = input_fn,steps=None)


ValueError: Features are incompatible with given information. Given features: Tensor("fifo_queue_DequeueMany:1", 
shape=(128, 119), dtype=float32), required signatures: TensorSignature(dtype=tf.float64, shape=TensorShape([Dimension(128), Dimension(119)]), is_sparse=False).

Набор данных:

X_train,y_train,len(X_train),len(y_train)

(array([[ 3.3042e-01,  2.4995e-01, -6.0874e-01, ...,  3.0400e+02,
          5.0000e+00,  1.0000e+00],
        [ 4.2466e-01,  8.5174e-01,  8.6044e-01, ...,  1.0000e+00,
          7.8000e+01,  1.0000e+00],
        [ 6.1890e-01, -1.1185e+00,  5.8483e-01, ...,  1.4000e+01,
          7.0000e+00,  1.0000e+00],
        ...,
        [ 9.0512e-01,  1.3008e-01,  1.0917e+00, ...,  1.7000e+01,
          2.0000e+00,  1.0000e+00],
        [-1.4751e-01,  5.5556e-01,  1.0764e+00, ...,  1.8000e+01,
          1.3000e+01,  1.0000e+00],
        [-5.0246e-01,  1.2178e+00, -8.0065e-01, ...,  1.0000e+00,
          3.0000e+00,  0.0000e+00]]),
 array([1, 0, 5, ..., 8, 5, 9]),
 510281,
 510281)
0
Abhay 25 Сен 2018 в 10:47

2 ответа

Лучший ответ

Решил это, сделав метки, отлитые как int

input_fn  =  numpy_io.numpy_input_fn(
      x=X_train.astype(np.float32),
      y=y_train.astype(np.int32),
      num_epochs=None,
shuffle=True)
classifier.fit(input_fn = input_fn,steps=None)

Не представляете, как это удалось решить с помощью int, но хотелось бы объяснения этому? кто-нибудь?

0
Abhay 25 Сен 2018 в 13:10

Проблема довольно четко описана в сообщении об ошибке. Пытаться

classifier.fit(x=tf.cast(X_train, tf.float32), y=y_train)

Кроме того, похоже, что вы используете устаревший формат ввода с tensors. Например, как преобразовать ввод в формат input_fn, посмотрите здесь.

0
kvorobiev 25 Сен 2018 в 08:10