tf.keras 在训练期间获取计算的梯度
tf.keras get computed gradient during training
根据所写内容 here 我试图在训练期间使用 tf.keras 获得计算的梯度,我最终得到以下结果在拟合阶段调用的回调函数:
使用的网络是非常标准的网络,完全连接且顺序。
r = network.fit(x=trn.X,y=trn.Y,verbose=2,batch_size=50,epochs=50,callbacks=[reporter,])
def on_train_begin(self, logs={}):
# Functions return weights of each layer
self.layerweights = []
for lndx, l in enumerate(self.model.layers):
if hasattr(l, 'kernel'):
self.layerweights.append(l.kernel)
input_tensors = [self.model.inputs[0],
self.model.sample_weights[0],
self.model.targets[0],
K.learning_phase()]
# Get gradients of all the relevant layers at once
grads = self.model.optimizer.get_gradients(self.model.total_loss, self.layerweights)
self.get_gradients = K.function(inputs=input_tensors,outputs=grads) # <-- Error Here
出现以下错误信息:
~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\eager\lift_to_graph.py in (.0)
312 # Check that the initializer does not depend on any placeholders.
313 sources = set(sources or [])
--> 314 visited_ops = set([x.op for x in sources])
315 op_outputs = collections.defaultdict(set)
316
AttributeError: 'NoneType' object has no attribute 'op'
知道如何解决吗?
已阅读 , and this one,但没有成功
AttributeError: 'NoneType' object has no attribute 'op'
表示你有一个对象或属性得到了None.
要处理它,你可以使用这个:
visited_ops = set([x.op for x in sources if x])
在 python 3.6.9 上使用旧版本的 keras(v. 2.2.4) 和 tensorflow (1.13.1) 解决了这个问题。
根据所写内容 here 我试图在训练期间使用 tf.keras 获得计算的梯度,我最终得到以下结果在拟合阶段调用的回调函数:
使用的网络是非常标准的网络,完全连接且顺序。
r = network.fit(x=trn.X,y=trn.Y,verbose=2,batch_size=50,epochs=50,callbacks=[reporter,])
def on_train_begin(self, logs={}):
# Functions return weights of each layer
self.layerweights = []
for lndx, l in enumerate(self.model.layers):
if hasattr(l, 'kernel'):
self.layerweights.append(l.kernel)
input_tensors = [self.model.inputs[0],
self.model.sample_weights[0],
self.model.targets[0],
K.learning_phase()]
# Get gradients of all the relevant layers at once
grads = self.model.optimizer.get_gradients(self.model.total_loss, self.layerweights)
self.get_gradients = K.function(inputs=input_tensors,outputs=grads) # <-- Error Here
出现以下错误信息:
~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\eager\lift_to_graph.py in (.0)
312 # Check that the initializer does not depend on any placeholders.
313 sources = set(sources or [])
--> 314 visited_ops = set([x.op for x in sources])
315 op_outputs = collections.defaultdict(set)
316
AttributeError: 'NoneType' object has no attribute 'op'
知道如何解决吗?
已阅读
AttributeError: 'NoneType' object has no attribute 'op'
表示你有一个对象或属性得到了None.
要处理它,你可以使用这个:
visited_ops = set([x.op for x in sources if x])
在 python 3.6.9 上使用旧版本的 keras(v. 2.2.4) 和 tensorflow (1.13.1) 解决了这个问题。