keras下使用lambda搭建n維球座標轉換層

2021-09-08 03:07:50 字數 1604 閱讀 3199

table of contents

n維球座標轉換公式

n維球座標轉換的**實現

遇到問題

關於n維球座標轉換,網路上有公式,但是幾乎沒找到實現**.在此將自己在keras下用lambda函式寫球座標轉換層的實現過程記錄下來,並且記下來一些中間遇到的坑.

參考下圖:

具體環境:在keras (以tensorflow為backend)中,使用lambda層呼叫自己寫的座標轉換函式.這裡注意,keras中除了使用lambda,也可以參考此教程編寫你自己的層.如果該層沒有要參與訓練的引數,就可以用lambda來寫,比較簡單;反之,要參考教程中的寫法,本文暫時不涉及.

座標變換函式**:

def sphere_trans(inputs):

# inputs, b = inputall

# print(inputs)

for t in range(inputs.shape[1]):

# 將距離r放在輸出tensor的第乙個位置,後續都是變換得到的角度

if t ==0:

va = tf.norm(inputs[:,], axis = 1, ord='euclidean', keep_dims = true)

else:

c1 = tf.norm(inputs[:,t:], axis = 1, ord='euclidean', keep_dims = true)

# c2 = inputs[:,t]

# c2 = tf.identity(inputs[:,t-1], name=none)

c2 = tf.expand_dims(last_itm, -1)

va = tf.divide(c1, c2, name=none)

va = tf.atan(va)

last_itm = inputs[:,t]

part1 = inputs[:,:t]

part2 = inputs[:,t + 1:]

# 因為tensorflow中不能對tensor進行指定位置元素進行修改,

# 所以本文麻煩一點通過contat函式實現這個功能

inputs = tf.concat([part1, va, part2], axis=1)

return inputs

lambda函式搭建層的**:

m = lambda(sphere_trans, name='sphere_trans')(a)

model = model(inputs=[a], outputs=[m])

tensorflow中對tensor操作有些麻煩,不能對特定位置元素進行修改,只能統一來替換.在此我們使用了concat函式來實現.

tensorflow中編寫層時,要獲取輸入tensor的某個位置或某一段元素,一定要在none維加上冒號,即"tf.norm(inputs[:,]"中的第乙個冒號.不加的話,模型搭建過程可能不會出錯,但是模型在測試時會報錯.這一點小問題之前耽誤了我很久.

windows下apache php環境搭建

3 php5.5.6配置 b.在系統環境變數path中新增 d php d php ext,重啟後生效 4 apache2.4配置 b.修改d apache24 conf httpd.conf.把serverroot這行修改為 serverroot d apache24 雙引號之間的就是你的apac...

windows下的tensorflow搭建

第一步 圖形驅動程式nvdia drives 注意其版本要和自己的顯示卡的型號相對應。可能出現的錯誤是 圖形驅動程式無法找到相容的影象硬體 解決方案參見 之後進行cuda的安裝,安裝與官網上的一致。第二步 進行cudnn的安裝,cudnn cuda 的資料夾下,windows 下沒有lib64 不知...

buildbot windows環境下的搭建

master 1.python m venv sandbox 我使用的是python3.67,試過python2.7,系統推薦用python3於是乎就轉python3,python3.6自帶虛擬環境 2.cd到sandbox下的scripts目錄先,activate虛擬環境 3.pip instal...