
    0h                         d Z ddlmc mZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddl	mZ ddl	mZ dd	lmZ dd
lmZ ddlmZ  edddg       ej&                  d       G d dej(                                      Zy)zBuilt-in linear model classes.    N)activations)initializers)regularizers)
base_layer)
input_spec)training)core)deprecation)keras_exportzkeras.experimental.LinearModelzkeras.models.LinearModel)v1c                   V     e Zd ZdZ	 	 	 	 	 	 	 d fd	Zd Zd Zd Zedd       Z	 xZ
S )	LinearModela*  Linear Model for regression and classification problems.

    This model approximates the following function:
    $$y = \beta + \sum_{i=1}^{N} w_{i} * x_{i}$$
    where $$\beta$$ is the bias and $$w_{i}$$ is the weight for each feature.

    Example:

    ```python
    model = LinearModel()
    model.compile(optimizer='sgd', loss='mse')
    model.fit(x, y, epochs=epochs)
    ```

    This model accepts sparse float inputs as well:

    Example:
    ```python
    model = LinearModel()
    opt = tf.keras.optimizers.Adam()
    loss_fn = tf.keras.losses.MeanSquaredError()
    with tf.GradientTape() as tape:
      output = model(sparse_input)
      loss = tf.reduce_mean(loss_fn(target, output))
    grads = tape.gradient(loss, model.weights)
    opt.apply_gradients(zip(grads, model.weights))
    ```

    c                 D   || _         t        j                  |      | _        || _        t        j                  |      | _        t        j                  |      | _        t        j                  |      | _	        t        j                  |      | _
        t        	| 0  di | y)a  Create a Linear Model.

        Args:
          units: Positive integer, output dimension without the batch size.
          activation: Activation function to use.
            If you don't specify anything, no activation is applied.
          use_bias: whether to calculate the bias/intercept for this model. If
            set to False, no bias/intercept will be used in calculations, e.g.,
            the data is already centered.
          kernel_initializer: Initializer for the `kernel` weights matrices.
          bias_initializer: Initializer for the bias vector.
          kernel_regularizer: regularizer for kernel vectors.
          bias_regularizer: regularizer for bias vector.
          **kwargs: The keyword arguments that are passed on to
            BaseLayer.__init__.
        N )unitsr   get
activationuse_biasr   kernel_initializerbias_initializerr   kernel_regularizerbias_regularizersuper__init__)
selfr   r   r   r   r   r   r   kwargs	__class__s
            \/var/www/html/engine/venv/lib/python3.12/site-packages/tf_keras/src/premade_models/linear.pyr   zLinearModel.__init__D   s    8 
%//*5 "."2"23E"F , 0 01A B"."2"23E"F , 0 01A B"6"    c                    t        |t              rt        t        |j	                                     }g | _        g | _        |D ]  }||   }t        j                  | j                  d| j                  | j                  |      }|j                  |       | j
                  j                  t        j                  ||             | j                  j                  |        nt        |t         t        f      rt#        d |D              rrg | _        |D ]e  }t        j                  | j                  d| j                  | j                        }|j                  |       | j                  j                  |       g nPt        j                  | j                  d| j                  | j                        }|j                  |       |g| _        | j$                  rE| j'                  d| j                  | j(                  | j*                  | j,                  d      | _        nd | _        t0        j2                  j                  | |       y )	NF)r   r   r   r   name)shaper!   c              3   P   K   | ]  }t        |t        j                           y wN)
isinstancetfTensorShape).0r"   s     r   	<genexpr>z$LinearModel.build.<locals>.<genexpr>|   s       <
27Jubnn-<
s   $&)r   r   r   r   biasT)r"   initializerregularizerdtype	trainable)r%   dictsortedlistkeysinput_specsdense_layersr	   Denser   r   r   buildappendr   	InputSpectupleallr   
add_weightr   r   r-   r*   r   Layer)r   input_shapenamesr!   r"   layers         r   r6   zLinearModel.buildi   s   k4(4 0 0 234E!D "D 0#D)

**"'+'>'>'+'>'> E"  ''((u4@ !!((/0 eT]3 <
;F<
 9
 !#D$ 0

**"'+'>'>'+'>'>	 E"!!((/0 JJjj#'#:#:#'#:#:	E KK$!&D==jj 11 11jj ( DI DIt[1r   c           	         d }t        |t              r| j                  D cg c]  }|j                   }}t	        |      t	        |j                               z
  }|r4t        dt	        |       dt	        |j                                d|       |D cg c]  }||   	 }}t        || j                        D ]  \  }} ||      }||}||z  } n\t        |t        t        f      r1t        || j                        D ]  \  }} ||      }||}||z  } n | j                  d   |      }| j                  r*t        j                  j                  || j                        }| j                  | j                  |      S |S c c}w c c}w )Nz\The `inputs` dictionary does not match the structure expected by the model.
	Expected keys: z
	Received keys: z
	Missing keys: r   )r%   r/   r4   r!   setr2   
ValueErrorzipr9   r1   r   r&   nnbias_addr*   r   )	r   inputsresultr?   r>   different_keysr!   inpoutputs	            r   callzLinearModel.call   s   fd#-1->->?EUZZ?E? Z#fkkm*<<N **-e*)#fkkm*<)=((8	:  055tfTl5F5!&$*;*;< %
Us>#Ff$F% .!&$*;*;< %
Us>#Ff$F% *T&&q)&1F==UU^^FDII6F??&??6**? @ 6s   FF
c           	         | j                   t        j                  | j                        | j                  t        j                  | j                        t        j                  | j                        t        j                  | j                        t        j                  | j                        d}t        j                  j                  |       }t        t        |j!                               t        |j!                               z         S )N)r   r   r   r   r   r   r   )r   r   	serializer   r   r   r   r   r   r   r   r   r<   
get_configr/   r1   items)r   configbase_configs      r   rN   zLinearModel.get_config   s    ZZ%//@"."8"8''# !- 6 6t7L7L M"."8"8''# !- 6 6t7L7L M
 !&&11$7D**,-V\\^0DDEEr   c                     ~ | di |S )Nr   r   )clsrP   custom_objectss      r   from_configzLinearModel.from_config   s    }V}r   )   NTzerosrW   NNr$   )__name__
__module____qualname____doc__r   r6   rK   rN   classmethodrU   __classcell__)r   s   @r   r   r       sL    @ " ##J72r"HF"  r   r   )r[   tensorflow.compat.v2compatv2r&   tf_keras.srcr   r   r   tf_keras.src.enginer   r   r   tf_keras.src.layersr	   tensorflow.python.utilr
    tensorflow.python.util.tf_exportr   deprecated_endpointsModelr   r   r   r   <module>rh      sy    % ! ! $ % % * * ( $ / 9 $(*DE "!!"BCu(.. u D	
ur   