gpt4 book ai didi

python - 如何修复 TensorFlow 中的维度错误?

转载 作者:太空狗 更新时间:2023-10-29 18:05:53 25 4
gpt4 key购买 nike

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

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)
<ipython-input-41-7ab0d7765f8c> in <module>()
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] 的。这会将输出与一维输入相匹配,并防止出现错误。

当你定义你的权重变量时(见下面的代码)-

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)

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

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

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

当您 reshape 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])

如果您需要更多解释,请在下方评论。

关于python - 如何修复 TensorFlow 中的维度错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34092850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com