tôi muốn so sánh các giá trị dự đoán yp
từ mạng thần kinh của tôi trong một thời trang cặp, và vì vậy tôi đã sử dụng (trở lại trong việc thực hiện NumPy cũ của tôi):TensorFlow: numpy.repeat() thay thế
idx = np.repeat(np.arange(len(yp)), len(yp))
jdx = np.tile(np.arange(len(yp)), len(yp))
s = yp[[idx]] - yp[[jdx]]
này về cơ bản tạo một lưới lập chỉ mục mà tôi sử dụng. idx=[0,0,0,1,1,1,...]
trong khi jdx=[0,1,2,0,1,2...]
. Tôi không biết liệu có cách làm đơn giản hơn hay không ...
Dù sao đi nữa, TensorFlow có tf.tile()
nhưng có vẻ như thiếu tf.repeat()
.
idx = np.repeat(np.arange(n), n)
v2 = v[idx]
Và tôi nhận được lỗi:
TypeError: Bad slice index [ 0 0 0 ..., 215 215 215] of type <type 'numpy.ndarray'>
Nó cũng không hoạt động để sử dụng một hằng số TensorFlow cho việc lập chỉ mục:
idx = tf.constant(np.repeat(np.arange(n), n))
v2 = v[idx]
-
TypeError: Bad slice index Tensor("Const:0", shape=TensorShape([Dimension(46656)]), dtype=int64) of type <class 'tensorflow.python.framework.ops.Tensor'>
Các ý tưởng là để chuyển đổicủa tôithực hiện cho TensorFlow.
Dường như có lỗi trong mã? Tôi chạy với 'len (yp) == 4' và đầu ra của' idx' là '[0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3]' và không '[0,0,0, 1,1,1, ...] '. – Clash
Thêm một cuộc gọi 'tf.transpose' sau khi ốp lát nhận được kết quả chính xác' [0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3] '. Dòng chính xác là 'idx = tf.transpose (tf.tile (idx, [len (yp), 1]))'? – Clash
Tốt bắt - câu trả lời thực sự đã đưa ra một cách quá dài để tính toán 'jdx'! Tôi đã cập nhật nó để làm rõ cách người ta có thể tính toán 'idx' và' jdx'. – mrry