【问题标题】:1D CNN for classification用于分类的 1D CNN
【发布时间】:2018-02-02 10:49:14
【问题描述】:

我正在构建一个卷积神经网络(使用 Tensorflow),它应该对一维输入进行分类。

到目前为止,这是我的代码:

import tensorflow as tf

n_outputs = 1
batch_size = 32
x = tf.placeholder(tf.float32, [batch_size, 10, 1])

filt = tf.zeros([3, 1, 1])

output = tf.nn.conv1d(x, filt, stride=2, padding="VALID")

y = tf.placeholder(tf.int32)
logits = tf.layers.dense(output, n_outputs)
xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=logits)
correct = tf.nn.in_top_k(logits, y, 1)

当我运行上面的代码时,我得到以下错误:

Traceback(最近一次调用最后一次): 文件“minex.py”,第 16 行,在 正确 = tf.nn.in_top_k(logits, y, 1) 文件“/home/jk/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/ops/gen_nn_ops.py”, 第 1449 行,在 in_top_k 中 目标=目标,k=k,名称=名称) 文件“/home/jk/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py”, 第 763 行,在 apply_op 中 op_def=op_def) 文件“/home/jk/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py”, 第 2329 行,在 create_op 中 set_shapes_for_outputs(ret) 文件“/home/jk/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py”, 第 1717 行,在 set_shapes_for_outputs 中 形状 = shape_func(op) 文件“/home/jk/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py”, 第 1667 行,在 call_with_requiring 中 返回 call_cpp_shape_fn(op, require_shape_fn=True) 文件“/home/jk/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/framework/common_shapes.py”, 第 610 行,在 call_cpp_shape_fn 中 debug_python_shape_fn, require_shape_fn) 文件“/home/jk/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/framework/common_shapes.py”, 第 676 行,在 _call_cpp_shape_fn_impl 引发 ValueError(err.message) ValueError:形状必须为 2 级,但对于输入形状为 [32,4,1], 的“InTopK”(操作:“InTopK”)为 3 级。

根据错误,我的问题似乎与形状有关,但我不确定为什么会发生或如何纠正它。

【问题讨论】:

    标签: python python-2.7 tensorflow classification conv-neural-network


    【解决方案1】:

    您可以使用tf.squeeze 从您的日志中删除外部维度。

    你的最后一行可能变成:

    correct = tf.nn.in_top_k(tf.squeeze(logits), y, 1)
    

    这将使 logits 张量的形状从 [32, 4, 1] 变为 [32, 4]。

    【讨论】:

    • 其他一些资源可能会提到tf.reshape,这是一个更通用的解决方案,但在这种情况下 tf.squeeze 更容易理解。在这个 tf.expand_dims 旁边,它或多或少地与 tf.squeeze 相反。
    猜你喜欢
    • 2021-11-16
    • 2019-08-09
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    相关资源
    最近更新 更多