o
    Me                     @   s   d Z ddlZddlm  mZ ddlZddlm	Z	 ddl
mZ dZdd ZG dd	 d	e	jZG d
d de	jZG dd dejZG dd de	jZG dd dejZG dd de	jZdS )z/A simple functional keras model with one layer.    N)model_collection_base)gradient_descent
   c                  C   sX   t jtjddt jd} t jtjddt jd}t jtjddt jd}| ||fS )Ni     dtype   )tfZconstantnprandomZrandfloat32)Zx_trainZy_trainZ	x_predict r   ND:\Projects\ConvertPro\env\Lib\site-packages\keras/distribute/simple_models.py_get_data_for_simple_models   s   
r   c                   @   (   e Zd ZdZdd Zdd Zdd ZdS )	SimpleFunctionalModelz)A simple functional model and its inputs.c                 K   s^   d}t jjdtjd}t jjdtj|d|}t j||d}tjdd}|j	d	d
g|d |S )Noutput_1)r   )shaper   r   )r   name)inputsZoutputsMbP?Zlearning_ratemsemaelossmetrics	optimizer)
keraslayersZInputr	   r   DenseModelr   SGDcompile)selfkwargsoutput_namexymodelr   r   r   r   	get_model&   s   zSimpleFunctionalModel.get_modelc                 C      t  S Nr   r$   r   r   r   get_data2      zSimpleFunctionalModel.get_datac                 C      t S r,   _BATCH_SIZEr.   r   r   r   get_batch_size5      z$SimpleFunctionalModel.get_batch_sizeN__name__
__module____qualname____doc__r*   r/   r4   r   r   r   r   r   #   s
    r   c                   @   r   )	SimpleSequentialModelz)A simple sequential model and its inputs.c                 K   sN   d}t  }t jjdtj|dd}|| tjdd}|j	ddg|d	 |S )
Nr   r   r   )r   r   Z	input_dimr   r   r   r   r   )
r   Z
Sequentialr   r    r	   r   addr   r"   r#   )r$   r%   r&   r)   r(   r   r   r   r   r*   <   s   

zSimpleSequentialModel.get_modelc                 C   r+   r,   r-   r.   r   r   r   r/   I   r0   zSimpleSequentialModel.get_datac                 C   r1   r,   r2   r.   r   r   r   r4   L   r5   z$SimpleSequentialModel.get_batch_sizeNr6   r   r   r   r   r;   9   s
    r;   c                       s$   e Zd Z fddZdd Z  ZS )_SimpleModelc                    s"   t    tjjdtjd| _d S )Nr   r   )super__init__r   r   r    r	   r   _dense_layerr.   	__class__r   r   r?   Q   s   
z_SimpleModel.__init__c                 C   s
   |  |S r,   )r@   )r$   r   r   r   r   callU   s   
z_SimpleModel.call)r7   r8   r9   r?   rC   __classcell__r   r   rA   r   r=   P   s    r=   c                   @   r   )	SimpleSubclassModelz%A simple subclass model and its data.c                 K   s*   t  }tjdd}|jddgd|d |S )Nr   r   r   r   F)r   r   Zcloningr   )r=   r   r"   r#   )r$   r%   r)   r   r   r   r   r*   \   s   
zSimpleSubclassModel.get_modelc                 C   r+   r,   r-   r.   r   r   r   r/   e   r0   zSimpleSubclassModel.get_datac                 C   r1   r,   r2   r.   r   r   r   r4   h   r5   z"SimpleSubclassModel.get_batch_sizeNr6   r   r   r   r   rE   Y   s
    	rE   c                   @   s"   e Zd Zdd Zejdd ZdS )_SimpleModulec                 C   s   t d| _d S )Ng      @)r	   Variablevr.   r   r   r   r?   m   s   z_SimpleModule.__init__c                 C   s
   | j | S r,   )rH   )r$   r'   r   r   r   __call__p   s   
z_SimpleModule.__call__N)r7   r8   r9   r?   r	   functionrI   r   r   r   r   rF   l   s    rF   c                   @   r   )	SimpleTFModuleModelz/A simple model based on tf.Module and its data.c                 K   s
   t  }|S r,   )rF   )r$   r%   r)   r   r   r   r*   x   s   zSimpleTFModuleModel.get_modelc                 C   r+   r,   r-   r.   r   r   r   r/   |   r0   zSimpleTFModuleModel.get_datac                 C   r1   r,   r2   r.   r   r   r   r4      r5   z"SimpleTFModuleModel.get_batch_sizeNr6   r   r   r   r   rK   u   s
    rK   )r:   numpyr
   Ztensorflow.compat.v2compatv2r	   r   Zkeras.distributer   Zkeras.optimizers.optimizer_v2r   r3   r   ZModelAndInputr   r;   r!   r=   rE   ModulerF   rK   r   r   r   r   <module>   s   		