运行skflow示例时出错

3

我刚刚安装了skflow和TensorFlow,但在运行skflow的示例代码时遇到了问题。示例代码如下:

import random
import pandas
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.cross_validation import train_test_split

import tensorflow as tf
import skflow

data = pandas.read_csv('tf_examples/data/titanic_train.csv')

# Use SciKit Learn
y, X = data['Survived'], data[['Age', 'SibSp', 'Fare']].fillna(0)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

lr = LogisticRegression()
lr.fit(X_train, y_train)
print accuracy_score(lr.predict(X_test), y_test)

# 3 layer neural network with rectified linear activation.

random.seed(42)
classifier = skflow.TensorFlowDNNClassifier(hidden_units=[10, 20, 10],
                                            n_classes=2, batch_size=128, steps=500,
                                            learning_rate=0.05)
classifier.fit(X_train, y_train)
print accuracy_score(classifier.predict(X_test), y_test)

当我运行这个示例时,我得到了:
python Example1.py
0.664804469274
Traceback (most recent call last):
  File "Example1.py", line 27, in <module>
    classifier.fit(X_train, y_train)
  File "//anaconda/lib/python2.7/site-packages/skflow/__init__.py", line 119, in fit
    self._setup_data_feeder(X, y)
  File "//anaconda/lib/python2.7/site-packages/skflow/__init__.py", line 71, in _setup_data_feeder
    self.n_classes, self.batch_size)
  File "//anaconda/lib/python2.7/site-packages/skflow/data_feeder.py", line 61, in __init__
    x_dtype = np.int64 if X.dtype == np.int64 else np.float32
  File "//anaconda/lib/python2.7/site-packages/pandas/core/generic.py", line 2246, in __getattr__
    (type(self).__name__, name))
AttributeError: 'DataFrame' object has no attribute 'dtype'

故障发生在:
classifier.fit(X_train, y_train)

非常感谢您的帮助。

2个回答

4

我认为这是skflow和pandas之间接口的问题。在将数据框传递给skflow之前,请尝试在数据框上调用.values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

lr = LogisticRegression()
lr.fit(X_train.values, y_train.values)
print accuracy_score(lr.predict(X_test.values), y_test.values)

# 3 layer neural network with rectified linear activation.

random.seed(42)
classifier = skflow.TensorFlowDNNClassifier(hidden_units=[10, 20, 10],
                                        n_classes=2, batch_size=128, steps=500,
                                        learning_rate=0.05)
classifier.fit(X_train.values, y_train.values)
print accuracy_score(classifier.predict(X_test.values), y_test.values)

那很有效!谢谢。 - CBrauer
你太棒了!谢谢!我已经苦苦挣扎了几个小时,试图让这个例子运行起来。 - Ilia Kopylov

0
感谢使用skflow!我们很久以前就已经添加了对pandas的支持。您可以在skflow中找到具体的实现io/pandas_io.py
我们的更多示例现在使用pandas来加载数据,例如文本分类示例,比如this one
希望这能帮助您愉快地使用skflow!

虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅链接的答案可能会失效。-【来自审查】 - mrry
明白了。谢谢你的提示。我已经修改了答案。 - Yuan Tang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接