【已解决】Keras:FailedPreconditionError: Attempting to use uninitialized value training/Adam/Variable_35

目录

  • 问题描述
  • 自己查找问题
  • 原因
  • 谷歌的解决办法
    • 办法一
    • 办法二
    • 办法三
    • 最终解决办法

问题描述

以前的配置为cuda==8.0tensorflow==1.14keras==2.2.4
随着集群的驱动升级,操作系统为ubuntu18.04,anaconda3使用的安装包没变Anaconda3-5.2.0-Linux-x86_64.sh,配置改为

版本
cuda 9.0
cudnn 7.6.0
tensorflow 1.9.0
keras 2.2.4

使用Keras训练时遇到以下问题

tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value training/Adam/Variable_35
	 [[Node: training/Adam/Variable_35/read = Identity[T=DT_FLOAT, _class=["loc:@training/Adam/Assign_10"], _device="/job:localhost/replica:0/task:0/device:GPU:0"](training/Adam/Variable_35)]]
	 [[Node: loss/add_4/_261 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_4683_loss/add_4", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

自己查找问题

  1. 发现有好几个包跟同门的版本不一致,卸载安装太麻烦,直接重装Anaconda,python从3.6.8自动降到3.6.5,重装之后问题没有解决
  2. 将优化器Adam改为SGD,没有解决

原因

Tensorflow中,所有变量都必须初始化才能使用

谷歌的解决办法

办法一

在model.fit(或model.fit_generator)之前加入

keras.backend.get_session().run(tf.global_variables_initializer())

结果:没有解决

办法二

在model.fit(或model.fit_generator)之前加入

K.set_session(tf.Session(graph=model.output.graph)) 
init = K.tf.global_variables_initializer() 
K.get_session().run(init)

结果:没有解决

办法三

使用local_variables_initilaizer() 替换 global_variables_initializer()
结果:没有解决

最终解决办法

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    hist = model.fit_generator(
    train_datagen, steps_per_epoch=STEPS, epochs=EPOCHS, verbose=1,
    validation_data=(x_valid, y_valid),
    callbacks = callbacks_list)

结果:完美解决

你可能感兴趣的:(Keras学习)