我用张量流构建了RBF网络。网络很小,因此我认为没有任何复杂的计算要求。但是,当它与CPU一起运行时,它将占用大量CPU。由于某些原因,我需要并行进行RBFN培训,因此CPU占用对我来说似乎很糟糕。
下面是示例代码。我做了一个前馈并优化了权重和循环偏差。
class RBFN(object):
def __init__(self, input_dim, output_dim, hidden_num, sess=None):
with tf.variable_scope('RBFN'):
with tf.device('/cpu:0'):
self.input_layer = tf.placeholder(tf.float32, [None, self.input_dim], name='input')
self.target_layer = tf.placeholder(tf.float32, [None, self.output_dim], name='output')
# hidden nodes
self.hidden = tf.placeholder(tf.float32, [hidden_num, input_dim], name='hidden')
self.center = None
e_c = tf.expand_dims(self.hidden, 0) # [1, hidden_num, input_dim]
e_x = tf.expand_dims(self.input_layer, 1) # [None, 1, self.input_dim]
self.hidden_layer = tf.exp(- self._delta * tf.reduce_sum(tf.square(tf.subtract(e_c, e_x)), 2))
# output layer
self.w = tf.Variable(tf.random_normal([hidden_num, output_dim], 0.0, 0.1, tf.float32))
self.b = tf.Variable(tf.zeros(shape=[1, output_dim]))
self.predict_layer = tf.matmul(self.hidden_layer, self.w) + self.b # [None, output_dim]
# loss
self.loss = tf.reduce_mean(tf.square(self.predict_layer-self.target_layer))
self.optimzer = tf.train.AdamOptimizer(1e-4)
self.op = self.optimzer.minimize(self.loss)
def update(self, X, Y, X_test=None, Y_test=None):
for i in range(self.max_iters):
_, loss = self.sess.run([self.op, self.loss],
feed_dict={self.input_layer: X, self.target_layer: Y,
self.hidden: self.center})
在我的情况下,input_dim为14,output_dim为11,hidden_num为70。输入数据X的形状为[1500,14],Y为[1500,11]。 max_iters是10K。 CPU占用在这里。 please refer to this image
我使用的网络容量和数据都更大,但是那只占用很少的CPU。 我的张量流用法有什么问题吗?