【问题标题】:Adding more layers with TensorFlow Error使用 TensorFlow 错误添加更多层
【发布时间】:2017-04-23 04:42:09
【问题描述】:

我正在尝试在张量流中向我的神经网络添加更多层,但在这里我收到了这个错误。

ValueError: Dimensions must be equal, but are 256 and 784 for 'MatMul_1' (op: 'MatMul') with input shapes: [?,256], [784,256].

这就是我创建权重和偏差的方式。

# Store layers weight & bias
weights = {
    'hidden_layer': tf.Variable(tf.random_normal([n_input, n_hidden_layer])),
    'out': tf.Variable(tf.random_normal([n_hidden_layer, n_classes]))
}
biases = {
    'hidden_layer': tf.Variable(tf.random_normal([n_hidden_layer])),
    'out': tf.Variable(tf.random_normal([n_classes]))
}

这是我制作模型的地方

# Hidden layer with RELU activation
layer_1 = tf.add(tf.matmul(x_flat, weights['hidden_layer']), biases['hidden_layer'])
layer_1 = tf.nn.relu(layer_1)
layer_1 = tf.nn.dropout(layer_1, keep_prob)

layer_2 = tf.add(tf.matmul(layer_1, weights['hidden_layer']), biases['hidden_layer'])
layer_2 = tf.nn.relu(layer_2)
layer_2 = tf.nn.dropout(layer_2, keep_prob)
# Output layer with linear activation
logits = tf.matmul(layer_2, weights['out']) + biases['out']

而且错误很可能在 layer_2 中。我正在使用 MNIST 数据集。并且 x y,一个 xflat 也被重塑为

x shape is  (?, 28, 28, 1)
y shape is  (?, 10)
x flat shape is  (?, 784)

【问题讨论】:

    标签: tensorflow mnist


    【解决方案1】:

    您可能应该对第 1 层和第 2 层使用不同的权重和偏差。

    问题是第 1 层和第 2 层都是为大小为 784 的输入而设计的。但第 1 层的输出大小为 256,因此第 2 层无法使用它。

    具体而言,您尝试在此行中相乘的矩阵 layer_1weights['hidden_layer'] 具有不兼容的大小:

    layer_2 = tf.add(tf.matmul(layer_1, weights['hidden_layer']), biases['hidden_layer'])
    

    这可能会起作用:

    # Store layers weight & bias
    weights = {
        'layer_1': tf.Variable(tf.random_normal([n_input, n_hidden_layer])),
        'layer_2': tf.Variable(tf.random_normal([n_hidden_layer, n_hidden_layer])),
        'out': tf.Variable(tf.random_normal([n_hidden_layer, n_classes]))
    }
    biases = {
        'layer_1': tf.Variable(tf.random_normal([n_hidden_layer])),
        'layer_2': tf.Variable(tf.random_normal([n_hidden_layer])),
        'out': tf.Variable(tf.random_normal([n_classes]))
    }
    

    # Hidden layer with RELU activation
    layer_1 = tf.add(tf.matmul(x_flat, weights['layer_1']), biases['layer_1'])
    layer_1 = tf.nn.relu(layer_1)
    layer_1 = tf.nn.dropout(layer_1, keep_prob)
    
    layer_2 = tf.add(tf.matmul(layer_1, weights['layer_2']), biases['layer_2'])
    layer_2 = tf.nn.relu(layer_2)
    layer_2 = tf.nn.dropout(layer_2, keep_prob)
    # Output layer with linear activation
    logits = tf.matmul(layer_2, weights['out']) + biases['out']
    

    【讨论】:

    • 是的,当然,这太简单了,我完全忘记了我使用的是相同的权重和偏差。非常感谢,我压力了一个小时,完全忽略了这一点。谢谢。
    猜你喜欢
    • 2020-03-19
    • 2017-06-18
    • 2017-12-12
    • 2017-01-02
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    相关资源
    最近更新 更多