tensorflow 2.x
import tensorflow as tf
from tensorflow import keras
print(tf.__version__)
print(keras.__version__)
class Linear(keras.layers.Layer):
def __init__(self, units=32, input_dim=32):
super(Linear, self).__init__()
w_init = tf.random_normal_initializer()
self.w = tf.Variable(
initial_value=w_init(shape=(input_dim, units), dtype="float32"),
trainable=True,
)
b_init = tf.zeros_initializer()
self.b = tf.Variable(
initial_value=b_init(shape=(units,), dtype="float32"), trainable=True
)
def call(self, inputs):
return tf.matmul(inputs, self.w) + self.b
import numpy as np
a=np.random.randn(10,2)
x=tf.convert_to_tensor(a,dtype=tf.float64)
linear_layer = Linear(4, 2)
y = linear_layer(x)
print(y)
print("================================================================================================")
print(np.matmul(a,linear_layer.weights[0].numpy())+linear_layer.weights[1].numpy())
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2bda82beb5a55adba4da31a520ef562a.png)
tensorflow 1.xx
import tensorflow as tf
import keras.backend as K
import keras
print(tf.__version__)
print(keras.__version__)
class Linear(keras.layers.Layer):
def __init__(self, units=32, input_dim=32):
super(Linear, self).__init__()
w_init = tf.random_normal_initializer()
self.w = tf.Variable(
initial_value=w_init(shape=(input_dim, units), dtype="float32"),
trainable=True,
)
b_init = tf.zeros_initializer()
self.b = tf.Variable(
initial_value=b_init(shape=(units,), dtype="float32"), trainable=True
)
def call(self, inputs):
return tf.matmul(inputs, self.w) + self.b
import numpy as np
a=np.random.randn(2,2)
x=tf.convert_to_tensor(a,dtype=tf.float32)
linear_layer = Linear(4, 2)
y = linear_layer(x)
print(K.eval(y))
print("================================================================================================")
print(np.matmul(a,K.eval(linear_layer.w))+K.eval(linear_layer.b))
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/42735c0aa2874473f699a38fef171283.png)