Tensorflow 如何将一层中的单个神经元与另一层中的单个神经元连接起来

Tensorflow 如何将一层中的单个神经元与另一层中的单个神经元连接起来,tensorflow,connection,sparse-matrix,Tensorflow,Connection,Sparse Matrix,我是Tensorflow的新手。我想将一个层与另一个层连接起来,在这个层中,只有相应的神经元通过权重相互连接,如下所示。这意味着前一层的所有神经元都没有连接到下一层的神经元 现在我用wixi得到了4个神经元。此外,我需要添加所有这些输出以获得单个值。现在我想把这个值传递给一个大小为4的密集层,以便自动编码器操作完成。 我已经为wixi操作创建了自定义层,我正确地得到了它,但当我在添加后应用普通致密层时,我得到了以下错误: ''' ValueError:layer Density_15的输入0与

我是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)


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)