cuốn sách gpt4 ai đã làm

python - độ dốc dòng chảy về ma trận

In lại Tác giả: Vũ trụ không gian 更新时间:2023-11-03 15:47:52 27 4
mua khóa gpt4 Nike

Cho bạn biết, tôi đang cố gắng triển khai thuật toán giảm độ dốc bằng Tensorflow.

Tôi có một ma trậnX

[x1 x2 x3 x4]
[x5 x6 x7 x8]

Tôi nhân một số vectơ riêng Y 得到 Z

      [y1]
Z = X [ y2 ] = [ z1 ]
[ y3 ] [ z2 ]
[y4]

Sau đó tôi chuyển Z qua hàm softmax và lấy logarit. Tôi sẽ gọi ma trận đầu ra là W.

Tất cả điều này được thực hiện như sau (thêm một ít bản soạn sẵn để nó hoạt động)

sess = tf.Session()
num_features = 4
num_actions = 2

Policy_matrix = tf.get_variable("params", (num_actions, num_features))
state_ph = tf.placeholder("float", (num_features, 1))
hành động_tuyến tính = tf.matmul(params, state_ph)
action_probs = tf.nn.softmax(action_line, axis=0)
action_problogs = tf.log(action_probs)

W (tương ứng vớihành động_problog) trông giống như

[w1]
[w2]

tôi muốn tìm w1 Liên quan đến ma trận X độ dốc của - nghĩa là tôi muốn tính toán

          [ d/dx1 w1 ]
d/dX w1 = .
.
[ d/dx8 w1 ]

(tốt nhất là vẫn trông giống như một ma trận để tôi có thể thêm nó vào X, nhưng tôi thực sự không quan tâm đến điều đó)

tôi hy vọng tf.gradient có thể giải quyết vấn đề. Mình tính "độ dốc" như thế này

problog_gradient = tf.gradients(action_problogs, Policy_matrix)

Tuy nhiên, khi tôi kiểm tra problog_gradient Đây là kết quả tôi nhận được khi

[]

Xin lưu ý rằng điều này có liên quan đến X có hình dạng giống hệt nhau, nhưng nó thực sự không nên. Tôi muốn nhận danh sách chứa hai gradient, mỗi gradient tương ứng với 8 phần tử. Tôi nghi ngờ những gì tôi nhận được là hai gradient, nhưng mỗi gradient liên quan đến bốn phần tử.

Tôi chưa quen với tensorflow nên tôi đánh giá cao lời giải thích về những gì đang diễn ra và cách tôi có thể đạt được hành vi mà tôi muốn.

câu trả lời hay nhất

Độ dốc yêu cầu hàm vô hướng, do đó, theo mặc định, nó tính tổng các mục. Đây là hành vi mặc định vì tất cả các thuật toán giảm độ dốc đều yêu cầu loại chức năng này và giảm độ dốc ngẫu nhiên (hoặc các biến thể của nó) là phương pháp ưu tiên nội bộ trong Tensorflow. Bạn sẽ không tìm thấy bất kỳ thuật toán nâng cao nào hơn (như BFGS hoặc các thuật toán khác) vì đơn giản là chúng chưa được triển khai (và chúng yêu cầu một thuật toán Jacobian thực sự, thuật toán này cũng chưa được triển khai). Về giá trị của nó, đây là một triển khai Jacobian hợp lệ mà tôi đã viết:

bản đồ def(f, x, dtype=None, Parallel_iterations=10):
'''
Áp dụng f cho mỗi phần tử trong x bằng cách sử dụng số lần lặp song song đã chỉ định.

Những điểm quan trọng:
1. Khi nói "các phần tử trong x", chúng tôi muốn nói rằng chúng tôi sẽ áp dụng f cho x[0],...x[tf.shape(x)[0]-1].
2. Kích thước đầu ra của f(x[i]) có thể tùy ý, tuy nhiên, nếu dtype của đầu ra đó.
khác với dtype của x, thì bạn cần chỉ định nó làm đối số bổ sung.
'''
nếu dtype là Không có:
dtype = x.dtype

n = tf.shape(x)[0]
loop_vars = [
tf.constant(0, n.dtype),
tf.TensorArray(dtype, size=n),
]
_, fx = tf.while_loop(
lambda j, _: j < n,
lambda j, kết quả: (j + 1, result.write(j, f(x[j]))),
loop_vars,
song song_iterations=parallel_iterations
)
trả về fx.stack()

def jacobian(fx, x, Parallel_iterations=10):
'''
Cho một tenxơ fx, là hàm của x, vector hóa fx (thông qua tf.reshape(fx, [-1])),
và sau đó tính jacobian của mỗi phần tử fx theo x.
Cụ thể, nếu x có hình dạng (m,n,...,p) và fx có L mục (tf.size(fx)=L), thì
đầu ra sẽ là (L,m,n,...,p), trong đó đầu ra[i] sẽ là (m,n,...,p), với mỗi mục nhập biểu thị
gradient của đầu ra[i] ghi phần tử tương ứng của x.
'''
return map(lambda fxi: tf.gradients(fxi, x)[0],
tf.reshape(fx, [-1]),
dtype=x.dtype,
Parallel_iterations=parallel_iterations)

Mặc dù cách triển khai này hoạt động nhưng nó không hoạt động khi bạn cố gắng lồng nó. Ví dụ: nếu bạn cố gắng sử dụng jacobian( jacobian( ... )) Khi tính Hessian sẽ xảy ra một số lỗi lạ. Điều này được theo dõi như Số phát hành 675 .Tôi vẫnđang chờ phản hồiTại sao điều này lại gây ra lỗi. Tôi tin rằng có một lỗi sâu xa trong quá trình triển khai vòng lặp while hoặc triển khai gradient, nhưng tôi thực sự không biết.

Dù sao, nếu bạn chỉ cần một jacobian, hãy thử đoạn mã trên.

Giới thiệu về python - Về độ dốc dòng chảy của ma trận, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/48878053/

27 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress