我正在尝试将教程的专家部分应用于我自己的数据,但我一直在遇到维度错误.这是导致错误的代码.
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,则输出长度应为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])
.
如果您需要更多解释,请在下面评论.