当前位置:  开发笔记 > 编程语言 > 正文

如何在TensorFlow中修复尺寸错误?

如何解决《如何在TensorFlow中修复尺寸错误?》经验,为你挑选了1个好方法。

我正在尝试将教程的专家部分应用于我自己的数据,但我一直在遇到维度错误.这是导致错误的代码.

def weight_variable(shape):
    initial = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(initial)

def bias_variable(shape):
    initial = tf.constant(0.1, shape=shape)
    return tf.Variable(initial)

def conv2d(x, W):
    return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

def max_pool_2x2(x):
    return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
                        strides=[1, 2, 2, 1], padding='SAME')

W_conv1 = weight_variable([1, 8, 1, 4])
b_conv1 = bias_variable([4])

x_image = tf.reshape(tf_in, [-1,2,8,1])

h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)

然后当我尝试运行此命令时:

W_conv2 = weight_variable([1, 4, 4, 8])
b_conv2 = bias_variable([8])

h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)

我收到以下错误:

ValueError                                Traceback (most recent call last)
 in ()
      3 
      4 h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
----> 5 h_pool2 = max_pool_2x2(h_conv2)

ValueError: ('filter must not be larger than the input: ', 'Filter: [', Dimension(2), 'x', Dimension(2), '] ', 'Input: [', Dimension(1), 'x', Dimension(4), '] ')

仅仅为了一些背景信息,我正在处理的数据是一个CSV文件,其中每行包含10个要素和1个空列,可以是1或0.我想要得到的是空的概率列将等于1的列.



1> Nick Sparrow..:

您必须对输入进行整形,使其与训练张量和输出兼容.如果输入长度为1,则输出长度应为1(长度代替尺寸).

当你处理 -

def conv2d(x, W):
    return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

def max_pool_2x2(x):
    return tf.nn.max_pool(x, ksize=[1, 1, 1, 1],
                    strides=[1, 1, 1, 1], padding='SAME')

注意我是如何改变步幅和ksize的[1, 1, 1, 1].这将使输出与1维输入相匹配,并防止出现错误.

当您定义权重变量时(请参阅下面的代码) -

def weight_variable(shape):
    initial = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(initial)

def bias_variable(shape):
    initial = tf.constant(0.1, shape=shape)
    return tf.Variable(initial)

您将不得不使前2个数字符合您用于训练模型的特征张量,后两个数字将是预测输出的维度(与输入的维度相同).

W_conv1 = weight_variable([1, 10, 1, 1])
b_conv1 = bias_variable([1])

注意[1, 10,在开头表示特征张量将是1x10特征张量; 最后两个数字1, 1]对应于输入和输出张量/预测变量的尺寸.

当你重塑你的x_foo张量(我称之为x_ [x prime])时,无论出于何种原因,你必须像以下那样定义它 -

x_ = tf.reshape(x, [-1,1,10,1])

注意中间的1和10 ...1,10,....再一次,这些数字对应于要素张量的维度.

对于每个偏差变量,您可以选择先前定义的变量的最终编号.例如,如果W_conv1 = weight_variable([1, 10, 1, 1])出现这种情况,您可以获取最终数字并将其放入偏差变量中,以便它可以匹配输入的尺寸.这样做就像这样b_conv1 = bias_variable([1]).

如果您需要更多解释,请在下面评论.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有