Nó sử dụng sự khác biệt tự động. Trong đó nó sử dụng quy tắc chuỗi và đi ngược lại trong biểu đồ gán độ dốc.
Giả sử chúng ta có một tenx C này tenx C này đã được thực hiện sau một loạt các thao tác Hãy nói bằng cách thêm, nhân, trải qua một số phi tuyến, v.v.
Vì vậy, nếu C này phụ thuộc vào một số bộ tenxơ gọi là Xk, chúng ta cần lấy độ dốc
Tensorflow luôn theo dõi đường dẫn của hoạt động. Ý tôi là hành vi tuần tự của các nút và cách dữ liệu chảy giữa chúng. Điều đó được thực hiện bởi biểu đồ
Nếu chúng ta cần lấy các đạo hàm của chi phí đầu vào X, thì điều đầu tiên sẽ làm là tải đường dẫn từ đầu vào x đến chi phí bằng cách mở rộng biểu đồ.
Sau đó, nó bắt đầu theo thứ tự sông. Sau đó phân phối gradient với quy tắc chuỗi. (Giống như backpropagation)
Bất kỳ cách nào nếu bạn đọc mã nguồn thuộc về tf.gradrons (), bạn có thể thấy rằng tenorflow đã thực hiện phần phân phối gradient này một cách tốt đẹp.
Trong khi quay lại tf tương tác với đồ thị, trong backword pass TF sẽ gặp các nút khác nhau Bên trong các nút này có các hoạt động mà chúng ta gọi là (ops) matmal, softmax, relu, batch_n normalization, v.v. Vì vậy, những gì chúng ta làm là tự động tải các op này vào đồ thị
Nút mới này tạo ra đạo hàm riêng của các hoạt động. get_gradient ()
Hãy nói một chút về các nút mới được thêm vào này
Bên trong các nút này, chúng tôi thêm 2 điều 1. Đạo hàm chúng tôi đã tính ealier) 2. Ngoài ra, các đầu vào cho opp mã hóa trong chuyển tiếp chuyển tiếp
Vì vậy, theo quy tắc chuỗi chúng ta có thể tính toán
Vì vậy, nó giống như một API backword
Vì vậy, tenorflow luôn nghĩ về thứ tự của biểu đồ để thực hiện phân biệt tự động
Vì vậy, như chúng ta biết, chúng ta cần các biến chuyển tiếp để tính toán độ dốc, sau đó chúng ta cần lưu trữ các giá trị xen kẽ trong các thang đo, điều này có thể làm giảm bộ nhớ Đối với nhiều thao tác, tf biết cách tính độ dốc và phân phối chúng.