Tôi đã xem xét các tài liệu của tenorflow về tf.nn.conv2d
đây . Nhưng tôi không thể hiểu những gì nó làm hoặc những gì nó đang cố gắng để đạt được. Nó nói trên các tài liệu,
# 1: Làm phẳng bộ lọc thành ma trận 2 chiều có hình dạng
[filter_height * filter_width * in_channels, output_channels]
.
Bây giờ nó làm gì? Đó là phép nhân phần tử khôn ngoan hay chỉ là phép nhân ma trận đơn giản? Tôi cũng không thể hiểu hai điểm khác được đề cập trong các tài liệu. Tôi đã viết chúng dưới đây:
# 2: Trích xuất các bản vá hình ảnh từ tenxơ đầu vào để tạo thành một tenor ảo có hình dạng
[batch, out_height, out_width, filter_height * filter_width * in_channels]
.# 3: Đối với mỗi bản vá, nhân phải ma trận bộ lọc và vectơ bản vá hình ảnh.
Nó sẽ thực sự hữu ích nếu bất cứ ai có thể đưa ra một ví dụ, một đoạn mã (cực kỳ hữu ích) có thể và giải thích những gì đang diễn ra ở đó và tại sao hoạt động lại như thế này.
Tôi đã thử mã hóa một phần nhỏ và in ra hình dạng của hoạt động. Tuy nhiên, tôi không thể hiểu.
Tôi đã thử một cái gì đó như thế này:
op = tf.shape(tf.nn.conv2d(tf.random_normal([1,10,10,10]),
tf.random_normal([2,10,10,10]),
strides=[1, 2, 2, 1], padding='SAME'))
with tf.Session() as sess:
result = sess.run(op)
print(result)
Tôi hiểu các bit và các mảnh của mạng nơ ron tích chập. Tôi đã nghiên cứu chúng ở đây . Nhưng việc thực hiện trên tenorflow không như tôi mong đợi. Vì vậy, nó đưa ra câu hỏi.
EDIT : Vì vậy, tôi đã triển khai một mã đơn giản hơn nhiều. Nhưng tôi không thể hiểu chuyện gì đang xảy ra. Tôi có nghĩa là làm thế nào kết quả là như thế này. Sẽ rất hữu ích nếu bất cứ ai có thể cho tôi biết quá trình nào mang lại đầu ra này.
input = tf.Variable(tf.random_normal([1,2,2,1]))
filter = tf.Variable(tf.random_normal([1,1,1,1]))
op = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='SAME')
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
print("input")
print(input.eval())
print("filter")
print(filter.eval())
print("result")
result = sess.run(op)
print(result)
đầu ra
input
[[[[ 1.60314465]
[-0.55022103]]
[[ 0.00595062]
[-0.69889867]]]]
filter
[[[[-0.59594476]]]]
result
[[[[-0.95538563]
[ 0.32790133]]
[[-0.00354624]
[ 0.41650501]]]]
tf.nn.conv2d()
, vì vậy phương pháp được đề cập hoàn toàn không được sử dụng khi chúng tôi sử dụng TF với hỗ trợ GPU, trừ khiuse_cudnn_on_gpu=False
được chỉ định rõ ràng.