Tensorflow 如何将一层中的单个神经元与另一层中的单个神经元连接起来
我是Tensorflow的新手。我想将一个层与另一个层连接起来,在这个层中,只有相应的神经元通过权重相互连接,如下所示。这意味着前一层的所有神经元都没有连接到下一层的神经元 现在我用wixi得到了4个神经元。此外,我需要添加所有这些输出以获得单个值。现在我想把这个值传递给一个大小为4的密集层,以便自动编码器操作完成。 我已经为wixi操作创建了自定义层,我正确地得到了它,但当我在添加后应用普通致密层时,我得到了以下错误: ''' ValueError:layer Density_15的输入0与layer::expected min_ndim=2不兼容,found ndim=1。收到完整形状:[100] ''' 下面是我自定义图层和模型的代码- 类层(tf.keras.layers.Layer): 类别MyModel(模型): model=MyModel() 输出=型号(车型系列数据1)Tensorflow 如何将一层中的单个神经元与另一层中的单个神经元连接起来,tensorflow,connection,sparse-matrix,Tensorflow,Connection,Sparse Matrix,我是Tensorflow的新手。我想将一个层与另一个层连接起来,在这个层中,只有相应的神经元通过权重相互连接,如下所示。这意味着前一层的所有神经元都没有连接到下一层的神经元 现在我用wixi得到了4个神经元。此外,我需要添加所有这些输出以获得单个值。现在我想把这个值传递给一个大小为4的密集层,以便自动编码器操作完成。 我已经为wixi操作创建了自定义层,我正确地得到了它,但当我在添加后应用普通致密层时,我得到了以下错误: ''' ValueError:layer Density_15的输入0与
my_train_data1的大小为(100,4)您可以通过从
tf.keras.layers.layer
中进行子类化来创建自己的层。
中介绍了如何创建自定义图层
和
我为你创建了图层
import tensorflow as tf
class DirectLayer(tf.keras.layers.Layer):
def __init__(self):
super(DirectLayer, self).__init__()
def build(self, input_shape):
self.w = self.add_weight(
shape=input_shape,
initializer="random_normal",
trainable=True,
)
self.b = self.add_weight(
shape=(input_shape[-1],), initializer="random_normal", trainable=True
)
def call(self, inputs):
# outputs shape
return tf.multiply(inputs, self.w) + self.b
layer1 = DirectLayer()
layer2 = DirectLayer()
x = tf.ones([16,2])
y = layer1(x)
y = layer2(y)
tf.print(y.shape)
它输出TensorShape([16,2])
,这意味着它保持了输入的维度,我相信这就是您想要的。注意,我使用了tf.multiply
(multiply elementwise)而不是密集层所做的-tf.matmul
(矩阵乘法)
def __init__(self, **kwargs):
super(MyModel, self).__init__(**kwargs)
self.layer_1 = Layer_w_x()
self.dense = Dense(4,activation = 'sigmoid')
def call(self, inputs):
# CALCULATION FOR FIRST NEURON
h1 = self.layer_1(inputs)
h4 = tf.reduce_sum(h1,1)
encoded = self.dense(h4)
return encoded
import tensorflow as tf
class DirectLayer(tf.keras.layers.Layer):
def __init__(self):
super(DirectLayer, self).__init__()
def build(self, input_shape):
self.w = self.add_weight(
shape=input_shape,
initializer="random_normal",
trainable=True,
)
self.b = self.add_weight(
shape=(input_shape[-1],), initializer="random_normal", trainable=True
)
def call(self, inputs):
# outputs shape
return tf.multiply(inputs, self.w) + self.b
layer1 = DirectLayer()
layer2 = DirectLayer()
x = tf.ones([16,2])
y = layer1(x)
y = layer2(y)
tf.print(y.shape)