
    i                     4   d dl Zd dlmZ d Z e ed      d         j                  dd      Z ed      d   d	z  j                  e      Z	 e ed
      d         j                  dd      Z
 ed      d   d	z  j                  e      Ze
dd Zedd Z G d d      ZdZ eddde      Zd Z	 ej$                  j'                  d dd      Zee   Ze	e   Z eeej1                  ee             ej3                  e ej4                  d      e          edz  Zk)    N)readc                 ^   | j                   }| j                  t        j                        } t        j                  |t        j
                        r+t        j                  |      j                  }|dkD  r| |z  } | S t        j                  t        j                  |             }|dkD  r| |z  } | S )Nr   g      ?)	dtypeastypenpfloat32
issubdtypeintegeriinfomaxabs)samplesoriginal_dtype	max_valuepeaks       ex01.pynormalize_audior      s    ]]NnnRZZ(G	}}^RZZ0HH^,00	q=y G
 N vvbffWo&#:tOGN    z../X_train.wav   i  z../y_train.wav	   z../X_test.wavz../y_test.wavi  c                   J    e Zd ZddZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)MLPClassifierc                    t         j                  j                  ||      t        j                  d||z   z        z  | _        t        j
                  d|f      | _        t         j                  j                  ||      t        j                  d||z   z        z  | _        t        j
                  d|f      | _        t        |      | _
        y )N       @r   )r   randomrandnsqrtW1zerosb1W2b2floatlearning_rate)self
input_sizehidden_sizeoutput_sizer%   s        r   __init__zMLPClassifier.__init__   s     ))//*k:RWWSJYdLdEe=ff((A{+,))//+{;bggc[[fMfFg>hh((A{+,"=1r   c                 ~    t        j                  |      t        j                  t        j                  |            z  S )a  
        SPDER activation: sin(x) * sqrt(|x|)
        - Sinusoidal enables automatic positional embedding learning
        - Damping function (sqrt(|x|)) preserves absolute coordinate values
        - Overcomes spectral bias toward lower frequencies
        )r   sinr   r   )r&   xs     r   spderzMLPClassifier.spder%   s(     vvay277266!9---r   c                 F   t        j                  |      }t        j                  |      }t        j                  |      }|dkD  }||   t        j                  ||         z  t        j
                  ||         d||   z  z  t        j                  ||         z  z   ||<   |S )z
        Derivative of SPDER: d/dx [sin(x) * sqrt(|x|)]
        f'(x) = sqrt(|x|) * cos(x) + sign(x) / (2 * sqrt(|x|)) * sin(x)
        
        At x=0, we approximate using the limit (effectively 0)
        g-q=r   )r   r   r   
zeros_likecossignr,   )r&   r-   abs_x
sqrt_abs_x
derivativenonzeros         r   spder_derivativezMLPClassifier.spder_derivative.   s     q	WWU^
]]1%
%-w"&&7"44WWQwZ C*W*=$=>"&&7BTTU 	7
 r   c                     t        j                  |t        j                  |dd      z
        }|t        j                  |dd      z  S )Nr   Taxiskeepdims)r   expr   sum)r&   r-   exp_xs      r   softmaxzMLPClassifier.softmaxA   s:    q266!!d;;<rvve!d;;;r   c                 v   t        j                  || j                        | j                  z   | _        | j                  | j                        | _        t        j                  | j                  | j                        | j                  z   | _	        | j                  | j                        | _        | j                  S N)r   dotr   r!   z1r.   a1r"   r#   z2r?   output)r&   Xs     r   forwardzMLPClassifier.forwardE   sv    &&DGG$tww.**TWW%&&$''*TWW4ll477+{{r   c                     |j                   d   }t        j                  |t        j                  |dz         z         |z  }|S )Nr   g&.>)shaper   r=   log)r&   y_truey_predmlosss        r   compute_losszMLPClassifier.compute_lossL   s<    LLOvv} 5566:r   c                    |j                   d   }||z
  }t        j                  | j                  j                  |      |z  }t        j
                  |dd      |z  }t        j                  || j                  j                        }|| j                  | j                        z  }	t        j                  |j                  |	      |z  }
t        j
                  |	dd      |z  }|
|||fS )Nr   Tr9   )	rJ   r   rB   rD   Tr=   r"   r7   rC   )r&   rG   rL   rM   rN   dz2dW2db2da1dz1dW1db1s               r   backwardzMLPClassifier.backwardQ   s    LLO voffTWWYY$q(ffSq4014 ffS$''))$D))$''22ffQSS#"ffSq4014Cc!!r   c                 f   | j                  |      }| j                  |||      \  }}}}| xj                  | j                  |z  z  c_        | xj                  | j                  |z  z  c_        | xj
                  | j                  |z  z  c_        | xj                  | j                  |z  z  c_        y rA   )rH   rZ   r   r%   r!   r"   r#   )r&   rG   rL   rM   rX   rY   rT   rU   s           r   updatezMLPClassifier.updatea   s    a!]]1ff=S#s4%%++4%%++4%%++4%%++r   c                 R    | j                  |      }t        j                  |d      S )Nr   )r:   )rH   r   argmax)r&   rG   probabilitiess      r   predictzMLPClassifier.predicti   s     QyyQ//r   c                 T    | j                  |      }t        j                  ||k(        S rA   )r`   r   mean)r&   rG   rL   ys       r   scorezMLPClassifier.scorem   s"    LLOwwqF{##r   N){Gz?)__name__
__module____qualname__r*   r.   r7   r?   rH   rP   rZ   r\   r`   rd    r   r   r   r      s4    2.&<
" ,0$r   r   re   d   
   )r'   r(   r)   r%   i`  )numpyr   scipy.io.wavfiler   r   reshapeX_trainr   inty_trainX_testy_testX20yt20r   r%   fir   randintidxrG   ytprintrd   r\   eyeri   r   r   <module>r}      s?    ! $/03
4
<
<R
E !!$q(
0
0
5	o.q1	2	:	:2s	C


"Q
&	.	.s	3Udmet}U$ U$t ScrQ^_

))

Auc
*CA	B	!QWWQ^HHQr
2FA r   