Tensorflow只是在训练过程中冻结而没有任何错误消息

时间:2019-05-05 13:53:48

标签: python tensorflow

我使用张量流网络生成值,然后将这些值馈入矩阵。然后将该矩阵的特征值和特征向量用于形成训练的成本函数。因此,人们拥有一个像这样的网络:

conv1 = tf.layers.conv2d(inputs=input_array,filters=64,kernel_size=(4,4),strides=(1, 1),padding='valid',activation="relu")

flatten1 = tf.layers.flatten(inputs=conv1)
dense1 = tf.layers.dense(inputs=flatten1,units=512,activation="tanh")

coeffs = tf.layers.dense(inputs=dense1,units=total_num_coeff,activation="linear",name="dense3",reuse=tf.AUTO_REUSE)

然后创建一个矩阵:

densereal= tf.layers.dense(inputs=coeffs,units=path_length*notot*notot,name='real',reuse=tf.AUTO_REUSE,trainable=True)
densecomplex=tf.layers.dense(inputs=coeffs,units=path_length*notot*notot,name='comp',reuse=tf.AUTO_REUSE,trainable=True)
with tf.device('/cpu:0'):

    matrix=tf.complex(tf.reshape(densereal,(batch_net_tf,path_length,notot,notot)),tf.reshape(densecomplex,(batch_net_tf,path_length,notot,notot)))
    eigenval,eigenvec=tf.linalg.eigh(tf.linalg.adjoint(matrix))

然后进行一些后处理,例如:

ret_tf=tf.math.multiply(tf.math.multiply(valuestf[:,tf.newaxis,:,0,tf.newaxis,index],tf.math.conj(tf.transpose(tf.gather(eigenvec,coordinatestf[:,0,index],axis=2),perm=[2,0,1,3]))),tf.transpose(tf.gather(eigenvec,coordinatestf[:,1,index],axis=2),[2,0,1,3]))
costfunction_all=tf.transpose(tf.real(tf.keras.backend.sum(tf.math.multiply(tf.math.multiply(tf.math.subtract(tf.real(eigenval),eigenvalues_true)*inhibitor_higher_bands[tf.newaxis,:,:],weighting_of_high_symmetry_points_tf[tf.newaxis,:,tf.newaxis])[tf.newaxis,:,:,:],tf.real(ret_tf)),axis=(2,3))),perm=[1,0])/(path_length*notot)
loss = 1*(tf.keras.backend.mean(tf.math.multiply(coeffs,tf.stop_gradient(costfunction_all))))
optimizer = tf.train.AdagradOptimizer(0.01)
train = optimizer.minimize(loss)

特征值计算必须在CPU上完成,因为它在GPU上的速度大约慢380倍(请参见tf.linalg.eigh extremely slow on GPU - normal?)。但是,此后的其他部分在GPU上的速度要快得多,因此我想将它们放在那里。我的问题如下:如果我在CPU上的实际网络之后运行所有程序,它将正常工作(没有错误,死机或类似现象)。但是,如果我为此部分切换到GPU(如此处所示),则训练只是随机冻结(以任意批次运行,每次冻结都会更改)。培训代码可以像这样:

for x in range(0,2500*2):
    sess.run((train,real_loss),feed_dict={ input_array: input_values[x*batch_net:(x+1)*batch_net,:,:,np.newaxis],eigenvalues_true: output[x*batch_net:(x+1)*batch_net,:,:]})[1]
    print(x)

输出仅在随机x处停止 有人可以告诉我如何解决这个问题,还告诉我错误是什么吗?或者,告诉我如何进一步对此进行调查)

谢谢!

编辑:只要我留在juypyter笔记本中,它似乎就可以工作。如果我打开例如任务管理器,甚至在打开时单击它,笔记本可能会停止工作(非常奇怪...)

0 个答案:

没有答案