I'm trying to use Tensorflow to optimize a few variables to be used in a KNN algorithm, however, I'm running into an issue where I'm unable to have a layer work properly if it is not connected to an
What I'm trying to do below is pass in
[] as a static tensor, and then using the
Lambda layer to coerce the weights into a usable shape. Once trained, I would just retrieve the weight value from the first
ones = tf.ones(shape=(1,1)) # trying to use this to take the place of dynamic inputs theta_layer = layers.Dense(1, activation="linear", use_bias=False, trainable=True)(ones) theta_layer = layers.Lambda(lambda x: tf.ones(shape=(self.batch_size,1)) * x)(theta_layer) print(theta_layer) # tf.Tensor( # [[-1.151663] # [-1.151663] # [-1.151663]], shape=(3, 1), dtype=float32) concat_layer = layers.Concatenate()([theta_layer, features_input]) model = models.Model(inputs=features_input, outputs=concat_layer) model.compile(optimizer="adam", loss="mse") #, metrics=["mae"])#, bias_regularizer=None)
The problem with the above strategy is that
theta_layer does not show up in
model.summary() and the weights don't show up in
Also, when I try to directly set
theta_layer as the model output, I get this message:
AttributeError: Tensor.op is meaningless when eager execution is enabled.
This is probably the giveaway but frankly I'm just not knowledgeable enough about Tensorflow.
I know that I can fix this by passing in a separate
tf.ones input to the model (not just into specific layers), but it would complicate the code seemingly unnecessarily (I have to do this for multiple layers/variables). Is there a way that I can alter the
tf.ones passed to the layer or the alter the layer itself to eliminate this issue?