【发布时间】:2017-09-15 20:08:36
【问题描述】:
我创建了一个自定义 keras 层,目的是在推理期间手动更改前一层的激活。以下是简单地将激活值与数字相乘的基本层。
import numpy as np
from keras import backend as K
from keras.layers import Layer
import tensorflow as tf
class myLayer(Layer):
def __init__(self, n=None, **kwargs):
self.n = n
super(myLayer, self).__init__(**kwargs)
def build(self, input_shape):
self.output_dim = input_shape[1]
super(myLayer, self).build(input_shape)
def call(self, inputs):
changed = tf.multiply(inputs, self.n)
forTest = changed
forTrain = inputs
return K.in_train_phase(forTrain, forTest)
def compute_output_shape(self, input_shape):
return (input_shape[0], self.output_dim)
当我将它与 IRIS 数据集一起使用时,它工作正常
model = Sequential()
model.add(Dense(units, input_shape=(5,)))
model.add(Activation('relu'))
model.add(myLayer(n=3))
model.add(Dense(units))
model.add(Activation('relu'))
model.add(Dense(3))
model.add(Activation('softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])
model.summary()
但是现在我想将“n”从 init 移动到调用函数,这样我就可以在训练后应用不同的 n 值来评估模型。这个想法是有一个占位符代替 n ,可以在调用它的评估函数之前用一些值初始化。我不确定如何实现这一目标。正确的方法是什么? 谢谢
【问题讨论】:
标签: python tensorflow deep-learning keras