[问题] 该如何在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