运行张量流分类器时出现奇怪的错误

时间:2017-05-07 01:46:16

标签: python machine-learning tensorflow

我正在尝试基于训练和测试本地存储的图像来制作一个简单的模型。我已按照此处的指南进行操作:https://www.tensorflow.org/tutorials/layers但已开始编辑代码以满足我自己的需求并使用我在本地存储的图像而不是从某处加载的图像。

mnist_classifier = learn.Estimator(
      model_fn=cnn_model_fn, model_dir="/tmp/mnist_convnet_model")


tensors_to_log = {"probabilities": "softmax_tensor"}
logging_hook = tf.train.LoggingTensorHook(
      tensors=tensors_to_log, every_n_iter=50)

testData = []
testLabels = []
for filename in os.listdir('images'):
    im = cv2.imread('images/' + filename)
    testData.append(im)
    testLabels.append(np.int32(1.0))

for filename in os.listdir('notImages'):
    im = cv2.imread('notImages/' + filename)
    testData.append(im)
    testLabels.append(np.int32(0.0))

evalTestData = []
evalTestLabels = []
for filename in os.listdir('evalImages'):
    im = cv2.imread('evalImages/' + filename)
    evalTestData.append(im)
    evalTestLabels.append(np.int32(1.0))

for filename in os.listdir('evalNotImages'):
    im = cv2.imread('evalNotImages/' + filename)
    evalTestData.append(im)
    evalTestLabels.append(np.int32(0.0))

testData = np.array(testData)
testLabels = np.array(testLabels)
evalTestData = np.array(evalTestData)
evalTestLabels = np.array(evalTestLabels)

mnist_classifier.fit(
      x=testData,
      y=testLabels,
      batch_size=10,
      steps=20000,
      monitors=[logging_hook])

看来这个合适的命令然后开始以下代码:

input_layer = tf.reshape(features, [-1, -1, -1, 3])

conv1 = tf.layers.conv2d(
      inputs=input_layer,
      filters=32,
      kernel_size=[5, 5],
      padding="same",
      activation=tf.nn.relu)

这个tf.layers.conv2d似乎导致崩溃,因为我收到以下错误:

File "cnn_mnist.py", line 37, in cnn_model_fn
    activation=tf.nn.relu)

TypeError: Value passed to parameter 'input' has DataType string not in list of allowed values: float16, float32, float64

我曾尝试过一些谷歌搜索,但无法找到人们专门讨论这个问题。显然,某些字符串不应该是。似乎我改变了这个代码使它使用本地图像已经打破了我没有纠正的东西。有什么想法吗?

编辑:我打印了features变量的类型,它说它是Tensor。然后我打印张量并得到了这个:

Tensor("input:0", shape=(?, 1), dtype=string)

这个dtype不应该是字符串,形状是错误的。似乎这可能是我的错误造成的。关于如何解决它的任何想法???

1 个答案:

答案 0 :(得分:0)

通过添加以下行修复:

input_layer = tf.to_float(input_layer)