[問題] 該如何在Tensorflow內相加結果?

作者: dogs1231992 (河豚)   2019-02-27 06:09:48
各位前輩大家好,小弟先前問了一個關於Tensorflow loss function設計的問題
後來我已經想到該怎麼設計了,但是目前遇到另一個問題,希望前輩們多多指導
首先,我有2個images,每個image都有一個能量值(之後會用到的Ref Y,是個2x1的矩陣)
經過整理、分類後,可以得到3種原子
每個原子都會進入一個專屬的NN中
程式碼為:
NN_O_1 = Add_layer(Data_in_O,57,15,Activation_function=tf.nn.tanh)
NN_O_2 = Add_layer(NN_O_1,15,15,Activation_function=tf.nn.tanh)
NN_O_3 = Add_layer(NN_O_2,15,1,Activation_function=None)
NN_H_1 = Add_layer(Data_in_H,57,15,Activation_function=tf.nn.tanh)
NN_H_2 = Add_layer(NN_H_1,15,15,Activation_function=tf.nn.tanh)
NN_H_3 = Add_layer(NN_H_2,15,1,Activation_function=None)
NN_Au_1 = Add_layer(Data_in_Au,57,15,Activation_function=tf.nn.tanh)
NN_Au_2 = Add_layer(NN_Au_1,15,15,Activation_function=tf.nn.tanh)
NN_Au_3 = Add_layer(NN_Au_2,15,1,Activation_function=None)
==============================================================================
在運算完畢後會得到三個Outputs,分別是 NN_O_3、NN_H_3 跟 NN_Au_3
三個結果的大小為:36x1、72x1、24x1的矩陣
此時我希望可以將NN_O_3的前20個值、NN_H_3的前40個值 及 NN_Au_3的前10個值加總
剩下的值另外加總
此時會得到兩個能量值 E1 跟 E2,再用這兩個值跟上面提到的Ref Y一起求RMSE
目前程式碼為:
for i in range(0,Number_total_images):
if i == 0:
O_part = np.zeros((Number_total_images) , dtype=np.float32)
H_part = np.zeros((Number_total_images) , dtype=np.float32)
Au_part = np.zeros((Number_total_images) , dtype=np.float32)
NN_energy = np.zeros((Number_total_images) , dtype=np.float32)
O_part[i] = tf.reduce_sum(NN_O_3 [ Number_O[i] :Number_O[i+1] ])
H_part[i] = tf.reduce_sum(NN_H_3 [ Number_H[i] :Number_H[i+1] ])
Au_part[i] = tf.reduce_sum(NN_Au_3[ Number_Au[i]:Number_Au[i+1] ])
NN_energy[i] = O_part[i] + H_part[i] + Au_part[i]
訓練的部分為:
loss = tf.sqrt(tf.reduce_mean(tf.square(tf.subtract(NN_energy, Data_out))))
train_step = tf.train.AdamOptimizer().minimize(loss)
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
for i in range(10):
# training
sess.run(train_step, feed_dict={Data_in_O: Descriptor_O,
Data_in_H: Descriptor_H,
Data_in_Au: Descriptor_Au,
Data_out: Data_energy})
主要概念是希望Tensorflow在呼叫loss function時
loss function可以往回去找到NN_energy的迴圈
然後完成相關計算,再把值帶回來loss function內
目前已知兩個有問題的地方
一個是不能用迴圈,要用while_loop
一個是不能用Numpy,但是我還沒想到該如何不用Numpy來設計矩陣 NN_energy
此外,不確定是不是Numpy的問題,但是執行後一直跳出錯誤
ValueError: setting an array element with a sequence.
報錯的位置在:
NN_energy[i] = O_part[i] + H_part[i] + Au_part[i]
不知是否有前輩寫過類似的程式碼可以提點我一下,謝謝

Links booklink

Contact Us: admin [ a t ] ucptt.com