Python 在tf.contrib.learn.LinearClassifier.fit中传递什么作为x和y参数 问题:
我已经建立了一个玩具的例子。在本例中,使用参数Python 在tf.contrib.learn.LinearClassifier.fit中传递什么作为x和y参数 问题:,python,pandas,tensorflow,Python,Pandas,Tensorflow,我已经建立了一个玩具的例子。在本例中,使用参数input\u fn调用fit方法,其中我通过train\u input\u fn。这就是TensorFlow传递数据的方式。但是,我确实希望运行小批量。幸运的是,fit有一个batch\u size参数,但我需要放弃使用input\u fn,而是传递x和y。我试过传递ndarrays和DataFrames以及train\u input\u fn函数的输出。什么都不管用。我需要一个使用batch\u size参数的工作示例 安装程序 下面是我没有问题
input\u fn
调用fit
方法,其中我通过train\u input\u fn
。这就是TensorFlow传递数据的方式。但是,我确实希望运行小批量。幸运的是,fit
有一个batch\u size
参数,但我需要放弃使用input\u fn
,而是传递x
和y
。我试过传递ndarray
s和DataFrames
以及train\u input\u fn
函数的输出。什么都不管用。我需要一个使用batch\u size
参数的工作示例
安装程序
下面是我没有问题的设置代码,后面是问题部分
没有问题(可以随意复制/粘贴/运行)
问题部分工作版本
问题部分非工作版本
下面是我得到的错误,但根据我的尝试,我得到了不同的错误。文件上说是矩阵。我也试过了
整个回溯的转储
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
12 p.fit(输入fn=序列输入fn,步数=10)
13 x,y=列车输入
--->14 p.配合(x=df_系列,y=df_系列,步数=10,批量尺寸=100)
15结果=p.评估(输入=评估输入=步骤1)
16对于已排序的输入(结果):
/Users/sean/anaconda/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimators.pyc(self、x、y、input\fn、steps、batch\u size、monitors)
171如果x为无:
172 raise VALUE ERROR('必须提供x或input_fn')
-->173输入\u fn,输入\u fn=\u获取\u输入\u fn(x,y,批次大小)
174 elif(x不是无)或(y不是无):
175 raise VALUE ERROR('不能同时提供输入和x和y.)
/Users/sean/anaconda/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.pyc in_get\u input_fn(x,y,批量大小)
65定义获取输入(x、y、批次大小):
66 df=数据馈线。设置列车数据馈线(
--->67 x,y,n_类=无,批量大小=批量大小)
68返回df.input\u builder,df.get\u feed\u dict\u fn()
69
/用户/sean/anaconda/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/io/data\u feeder.pyc在设置\u train\u data\u feeder中(X、y、n类、批量大小、无序、时代)
97 ValueError:如果'X'和'y'中的一个是可写的,而另一个不是。
98 """
--->99 X,y=\u数据类型\u过滤器(X,y)
100如果有以下情况:
101#pylint:disable=g-import-not-at-top
/Users/sean/anaconda/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/io/data\u feeder.pyc in_data\u type\u filter(X,y)
65 y=提取标签(y)
66如果有熊猫:
--->67 X=提取数据(X)
68如果y不是无:
69 y=提取标签(y)
/提取熊猫数据(数据)中的Users/sean/anaconda/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/io/pandas\u io.pyc
51返回数据.values.astype('float'))
52.其他:
--->53 raise VALUERROR('数据的数据类型必须是int、float或bool')
54
55
ValueError:数据的数据类型必须为int、float或bool。
如果您通过x
和y
的格式似乎与input\u fn
的格式不同。引用fit
的:
x:矩阵或形状张量[n_样本,n_特征…]。可以是返回特征数组的迭代器。用于拟合模型的训练输入样本。如果设置,则输入必须为无
下面的例子是有效的
- 我不得不用布尔值代替
/'Yes'
(这可能不是等价的,但说明了这一点),因为人们似乎无法以这种方式输入稀疏数据'No'
- 我使用
来获取列expert\u real\u valued\u columns\u from\u input
import pandas as pd
import numpy as np
import tensorflow as tf
import tempfile
np.random.seed([3,1415])
_x_df = pd.DataFrame(dict(
cat1=np.random.choice((True, False), (100,),),
val1=np.random.rand(100),
val2=np.random.rand(100),
val3=np.random.rand(100)))
_y_df = pd.DataFrame(dict(label=np.random.choice((0, 1), (100,))))
trainBegin, trainEnd = 0, 80
testBegin, testEnd = 80, 100
x_df_train = _x_df.iloc[trainBegin:trainEnd, :]
x_df_test = _x_df.iloc[testBegin:testEnd, :]
y_df_train = _y_df.iloc[trainBegin:trainEnd, :]
y_df_test = _y_df.iloc[testBegin:testEnd, :]
wide_columns = tf.contrib.learn.infer_real_valued_columns_from_input(x_df_train)
model_dir = tempfile.mkdtemp()
m = tf.contrib.learn.LinearClassifier(feature_columns=wide_columns, model_dir=model_dir)
m.fit(x_df_train, y_df_train, batch_size=5, steps=200)
results = m.evaluate(x_df_test, y_df_test, batch_size=5, steps=1)
for key in sorted(results):
print("%s: %s" % (key, results[key]))
model_dir = tempfile.mkdtemp()
m = tf.contrib.learn.LinearClassifier(feature_columns=wide_columns, model_dir=model_dir)
m.fit(input_fn=train_input_fn, steps=200)
results = m.evaluate(input_fn=eval_input_fn, steps=1)
for key in sorted(results):
print("%s: %s" % (key, results[key]))
accuracy: 0.45
eval_auc: 0.459596
loss: 0.771354
model_dir = tempfile.mkdtemp()
m = tf.contrib.learn.LinearClassifier(feature_columns=wide_columns, model_dir=model_dir)
m.fit(input_fn=train_input_fn, steps=200)
# 2 lines that are different ##########################
x, y = train_input_fn()
results = m.evaluate(x=x, y=y, batch_size=100, steps=1)
#######################################################
for key in sorted(results):
print("%s: %s" % (key, results[key]))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-135-5b53add19aac> in <module>()
12 # p.fit(input_fn=train_input_fn, steps=10)
13 x, y = train_input_fn()
---> 14 p.fit(x=df_train, y=df_train, steps=10, batch_size=100)
15 results = p.evaluate(input_fn=eval_input_fn, steps=1)
16 for key in sorted(results):
/Users/sean/anaconda/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.pyc in fit(self, x, y, input_fn, steps, batch_size, monitors)
171 if x is None:
172 raise ValueError('Either x or input_fn must be provided.')
--> 173 input_fn, feed_fn = _get_input_fn(x, y, batch_size)
174 elif (x is not None) or (y is not None):
175 raise ValueError('Can not provide both input_fn and either of x and y.')
/Users/sean/anaconda/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.pyc in _get_input_fn(x, y, batch_size)
65 def _get_input_fn(x, y, batch_size):
66 df = data_feeder.setup_train_data_feeder(
---> 67 x, y, n_classes=None, batch_size=batch_size)
68 return df.input_builder, df.get_feed_dict_fn()
69
/Users/sean/anaconda/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/io/data_feeder.pyc in setup_train_data_feeder(X, y, n_classes, batch_size, shuffle, epochs)
97 ValueError: if one of `X` and `y` is iterable and the other is not.
98 """
---> 99 X, y = _data_type_filter(X, y)
100 if HAS_DASK:
101 # pylint: disable=g-import-not-at-top
/Users/sean/anaconda/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/io/data_feeder.pyc in _data_type_filter(X, y)
65 y = extract_dask_labels(y)
66 if HAS_PANDAS:
---> 67 X = extract_pandas_data(X)
68 if y is not None:
69 y = extract_pandas_labels(y)
/Users/sean/anaconda/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/io/pandas_io.pyc in extract_pandas_data(data)
51 return data.values.astype('float')
52 else:
---> 53 raise ValueError('Data types for data must be int, float, or bool.')
54
55
ValueError: Data types for data must be int, float, or bool.
import pandas as pd
import numpy as np
import tensorflow as tf
import tempfile
np.random.seed([3,1415])
_x_df = pd.DataFrame(dict(
cat1=np.random.choice((True, False), (100,),),
val1=np.random.rand(100),
val2=np.random.rand(100),
val3=np.random.rand(100)))
_y_df = pd.DataFrame(dict(label=np.random.choice((0, 1), (100,))))
trainBegin, trainEnd = 0, 80
testBegin, testEnd = 80, 100
x_df_train = _x_df.iloc[trainBegin:trainEnd, :]
x_df_test = _x_df.iloc[testBegin:testEnd, :]
y_df_train = _y_df.iloc[trainBegin:trainEnd, :]
y_df_test = _y_df.iloc[testBegin:testEnd, :]
wide_columns = tf.contrib.learn.infer_real_valued_columns_from_input(x_df_train)
model_dir = tempfile.mkdtemp()
m = tf.contrib.learn.LinearClassifier(feature_columns=wide_columns, model_dir=model_dir)
m.fit(x_df_train, y_df_train, batch_size=5, steps=200)
results = m.evaluate(x_df_test, y_df_test, batch_size=5, steps=1)
for key in sorted(results):
print("%s: %s" % (key, results[key]))