Я использую набор данных CIFAR-10 для шумоподавления изображения. Я получаю сообщение об ошибке при выполнении умножения матриц, которое говорит InvalidArgumentError
Я планирую построить автоэнкодер с тремя слоями кодера и тремя слоями декодера. Но умножение матриц происходит не так, как я ожидал.
Я попытался использовать API-интерфейс tenorflow «плотный», но не смог разобраться.
Вот как я изучаю веса и смещения, также определяя кодер и декодер
n_input =1024
X = tf.placeholder("float", [None, n_input])
Y = tf.placeholder("float", [None, n_input])
weights = {
'encoder_h1': tf.Variable(tf.truncated_normal([n_input, n_hidden_1], stddev=0.01)),
'encoder_h2': tf.Variable(tf.truncated_normal([n_hidden_1, n_hidden_2], stddev=0.01)),
'encoder_h3': tf.Variable(tf.truncated_normal([n_hidden_2, n_hidden_3], stddev=0.01)),
'decoder_h1': tf.Variable(tf.truncated_normal([n_hidden_3, n_hidden_2], stddev=0.01)),
'decoder_h2': tf.Variable(tf.truncated_normal([n_hidden_2, n_hidden_1], stddev=0.01)),
'decoder_h3': tf.Variable(tf.truncated_normal([n_hidden_1, n_input], stddev=0.01))
}
biases = {
'encoder_b1': tf.Variable(tf.truncated_normal([n_hidden_1], stddev=0.01)),
'encoder_b2': tf.Variable(tf.truncated_normal([n_hidden_2], stddev=0.01)),
'encoder_b3': tf.Variable(tf.truncated_normal([n_hidden_3], stddev=0.01)),
'decoder_b1': tf.Variable(tf.truncated_normal([n_hidden_2], stddev=0.01)),
'decoder_b2': tf.Variable(tf.truncated_normal([n_hidden_1], stddev=0.01)),
'decoder_b3': tf.Variable(tf.truncated_normal([n_input], stddev=0.01))
}
def encoder(x):
layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['encoder_h1']),
biases['encoder_b1']))
layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['encoder_h2']),
biases['encoder_b2']))
layer_3 = tf.nn.sigmoid(tf.add(tf.matmul(layer_2, weights['encoder_h3']),
biases['encoder_b3']))
return layer_3
def decoder(x):
layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['decoder_h1']),
biases['decoder_b1']))
layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['decoder_h2']),
biases['decoder_b2']))
layer_3 = tf.nn.sigmoid(tf.add(tf.matmul(layer_2, weights['decoder_h3']),
biases['decoder_b3']))
return layer_3
После того, как я приступил к построению модели нейронной сети, выполнив приведенный ниже код, я начал получать ошибки
encoder_op = encoder(X)
decoder_op = decoder(encoder_op)
y_pred = decoder_op
cost = tf.reduce_mean(tf.pow(Y - y_pred, 2))
optimizer = tf.train.RMSPropOptimizer(learning_rate).minimize(cost)
init = tf.global_variables_initializer()
Вот как выглядит журнал ошибок, я думаю, что проблема начинается с вызова функции encoder () при построении модели.
InvalidArgumentError Traceback (most recent call last)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py in _create_c_op(graph, node_def, inputs, control_inputs)
1658 try:
-> 1659 c_op = c_api.TF_FinishOperation(op_desc)
1660 except errors.InvalidArgumentError as e:
InvalidArgumentError: Dimensions must be equal, but are 1024 and 128 for 'MatMul_2' (op: 'MatMul') with input shapes: [?,1024], [128,256].