使用 TensorFlow Error 添加更多层

Adding more layers with TensorFlow Error

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

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)

您可能应该为第 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']