私は現在2つのnumpy配列を持っています:
X
-(157、128)-157セットの128機能Y
-(157)-機能セットの分類これは、これらの機能の線形分類モデルを構築しようとするために書いたコードです。
まず、配列をTensorflowデータセットに適合させました。
train_input_fn = tf.estimator.inputs.numpy_input_fn(
x={"x": X},
y=Y,
num_epochs=None,
shuffle=True)
次に、SVMモデルをfit
しようとしました:
svm = tf.contrib.learn.SVM(
example_id_column='example_id', # not sure why this is necessary
feature_columns=tf.contrib.learn.infer_real_valued_columns_from_input(X), # create feature columns (not sure why this is necessary)
l2_regularization=0.1)
svm.fit(input_fn=train_input_fn, steps=10)
しかし、これは単にエラーを返します:
WARNING:tensorflow:float64 is not supported by many models, consider casting to float32.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpf1mwlR
WARNING:tensorflow:tf.variable_op_scope(values, name, default_name) is deprecated, use tf.variable_scope(name, default_name, values)
Traceback (most recent call last):
File "/var/www/idmy.team/python/train/classifier.py", line 59, in <module>
svm.fit(input_fn=train_input_fn, steps=10)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/util/deprecation.py", line 316, in new_func
return func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 480, in fit
loss = self._train_model(input_fn=input_fn, hooks=hooks)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 985, in _train_model
model_fn_ops = self._get_train_ops(features, labels)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 1201, in _get_train_ops
return self._call_model_fn(features, labels, model_fn_lib.ModeKeys.TRAIN)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 1165, in _call_model_fn
model_fn_results = self._model_fn(features, labels, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/linear.py", line 244, in sdca_model_fn
features.update(layers.transform_features(features, feature_columns))
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/layers/feature_column_ops.py", line 656, in transform_features
transformer.transform(column)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/layers/feature_column_ops.py", line 847, in transform
feature_column.insert_transformed_feature(self._columns_to_tensors)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/layers/feature_column.py", line 1816, in insert_transformed_feature
input_tensor = self._normalized_input_tensor(columns_to_tensors[self.name])
KeyError: ''
私は何を間違えていますか?
エラーをスローしないSVMの使用例を次に示します。
import numpy
import tensorflow as tf
X = numpy.zeros([157, 128])
Y = numpy.zeros([157], dtype=numpy.int32)
example_id = numpy.array(['%d' % i for i in range(len(Y))])
x_column_name = 'x'
example_id_column_name = 'example_id'
train_input_fn = tf.estimator.inputs.numpy_input_fn(
x={x_column_name: X, example_id_column_name: example_id},
y=Y,
num_epochs=None,
shuffle=True)
svm = tf.contrib.learn.SVM(
example_id_column=example_id_column_name,
feature_columns=(tf.contrib.layers.real_valued_column(
column_name=x_column_name, dimension=128),),
l2_regularization=0.1)
svm.fit(input_fn=train_input_fn, steps=10)
SVM Estimatorに渡される例 文字列IDが必要 。おそらくinfer_real_valued_columns_from_input
、ただし、列に適切な名前を選択するために辞書を渡す必要があります。この場合、機能列を自分で作成する方が概念的に簡単です。
self.name
_は、エラーの内容である_column_to_tensors
_辞書に存在せず、_self.name
_の値は空の文字列ですtf.estimator.inputs.numpy_input_fn
_に引数を与えることに失敗したと思います解決策は、train_input_fn行を次のように変更することです。
_train_input_fn = tf.estimator.inputs.numpy_input_fn(x=X,
y=Y,
num_epochs=None,
shuffle=True)
_
x
引数はnumpy配列でなければならず、辞書を与えていると思います
私は彼らの チュートリアル に固執し、空想をしません
_real_feature_column = real_valued_column(...)
sparse_feature_column = sparse_column_with_hash_bucket(...)
estimator = SVM(
example_id_column='example_id',
feature_columns=[real_feature_column, sparse_feature_column],
l2_regularization=10.0)
# Input builders
def input_fn_train: # returns x, y
...
def input_fn_eval: # returns x, y
...
estimator.fit(input_fn=input_fn_train)
estimator.evaluate(input_fn=input_fn_eval)
estimator.predict(x=x)
_
=============== UPDATED ==============
self.name
_が空の文字列であり、その空の文字列は_infer_real_valued_columns_from_input
_オブジェクトを作成する__RealValuedColumn
_に渡す辞書に存在しないことを示していますtf.contrib.learn.infer_real_valued_columns_from_input(X)
渡すXは辞書である必要があるため、_self.name
_の__RealValuedColumn
_オブジェクトは、あなたが渡す辞書これが私がしたことです
_import tensorflow as tf
import numpy as np
X = np.array([[1], [0], [0], [1]])
Y = np.array([[1], [0], [0], [1]])
dic = {"x": X}
train_input_fn = tf.estimator.inputs.numpy_input_fn(
x=dic,
y=Y,
num_epochs=None,
shuffle=True)
svm = tf.contrib.learn.SVM(example_id_column='x', feature_columns=tf.contrib.learn.infer_real_valued_columns_from_input(dic), l2_regularization=0.1)
svm.fit(input_fn=train_input_fn, steps=10)
_
今、これは上記のエラーを削除しますが、新しいエラー_TypeError: Input 'input' of 'SdcaFprint' Op has type int64 that does not match expected type of string.
_を与えます