【问题标题】:How to connect a single neuron in one layer with the single neuron in another layer如何将一层中的单个神经元与另一层中的单个神经元连接起来
【发布时间】:2020-10-13 05:10:00
【问题描述】:

我是 TensorFlow 的新手。我想将一层与另一层连接起来,其中只有相应的神经元通过权重相互连接,如下所示。这意味着上一层的所有神经元都没有连接到下一层的神经元。

现在我用 wixi 获得了 4 个神经元。此外,我需要添加所有这些输出以获得单个值。现在我想将此单个值传递给大小为 4 的密集层,以完成自动编码器操作。 我已经为 wixi 操作创建了我的自定义层,并且我正确地得到了它,但是当我在添加后应用正常的密集层时,我得到以下错误:

''' ValueError:dense_15 层的输入 0 与该层不兼容::预期 min_ndim=2,发现 ndim=1。收到的完整形状:[100] ''' 以下是我的自定义层和模型代码-

类Layer_w_x(tf.keras.layers.Layer):

def __init__(self):
  super(Layer_w_x, self).__init__()
def build(self, input_shape):
  self.w = self.add_weight(shape=(input_shape[-1],), 
initializer="random_normal", trainable=True)

def call(self, inputs):
  return tf.multiply(inputs, self.w)

类 MyModel(Model):

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

model = MyModel()

输出 =model(my_train_data1)

my_train_data1 的大小为 (100,4)

【问题讨论】:

    标签: tensorflow connection sparse-matrix


    【解决方案1】:

    您可以通过从tf.keras.layers.Layer 继承来创建自己的层。 在https://www.tensorflow.org/guide/keras/custom_layers_and_models 中描述了创建自定义层 和https://www.tensorflow.org/tutorials/customization/custom_layers

    我为你创建了图层。

    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(按元素相乘),而不是 Dense 层所做的——tf.matmul(矩阵相乘)。

    【讨论】:

      猜你喜欢
      • 2017-05-21
      • 2015-07-14
      • 2017-05-21
      • 2018-08-16
      • 2019-05-05
      • 2020-06-12
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多