Skip to content

Instantly share code, notes, and snippets.

@m-alcu
Created May 6, 2018 07:52
Show Gist options
  • Save m-alcu/45f4a083cb5e388d2ed26ace4392ed66 to your computer and use it in GitHub Desktop.
Save m-alcu/45f4a083cb5e388d2ed26ace4392ed66 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from __future__ import print_function, division\n",
"from builtins import range\n",
"# Note: you may need to update your version of future\n",
"# sudo pip install -U future\n",
"\n",
"import numpy as np\n",
"\n",
"\n",
"def getData():\n",
" # images are 48x48 = 2304 size vectors\n",
" Y = []\n",
" X = []\n",
" first = True\n",
" for line in open('fer2013.csv'):\n",
" if first:\n",
" first = False\n",
" else:\n",
" row = line.split(',')\n",
" Y.append(int(row[0]))\n",
" X_item = [int(p) for p in row[1].split()]\n",
" X.append(X_item)\n",
"\n",
" return X, Y"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"label_map = ['Anger', 'Disgust', 'Fear', 'Happy', 'Sad', 'Surprise', 'Neutral']"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"X, Y = getData()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA5IAAACcCAYAAAANk5T/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvFvnyVgAAIABJREFUeJzsvXn0bVV15/tdl4s9ohHFoIL0II2g\ngkpQMNHYYCqUiZJIjJrWV5VKX0mqMurF6l4qqeQlL/XiyHua7iVlYgNaSSCxA0XpBJS+R6URUdGg\nBBQv9+73xznffT7n/L777HPgwiU4v2Pc8Tt37b3XXs1czZ7zu+ZsXdepUCgUCoVCoVAoFAqFVbFp\nRxegUCgUCoVCoVAoFAr/vFAfkoVCoVAoFAqFQqFQWAv1IVkoFAqFQqFQKBQKhbVQH5KFQqFQKBQK\nhUKhUFgL9SFZKBQKhUKhUCgUCoW1UB+ShUKhUCgUCoVCoVBYC/UhWfi2QWvtj1pr/2FHl6NQKBQK\nDx+01v6stfZfdnQ5CjsGrbU9W2v/1FrbaUeXpfDQRmvto621n9jR5die+Lb4kJx23D+21h65o8tS\neODQWvtca+0brbU7W2t3tNbOaa29pbW2SZK6rntL13X/eQeV7fjW2i074t2FGSAj/4R/e+zochW2\nP6Z9/dKFtDe11j6xo8pUeGihtXbsdJ34Wmvtq621s1trR+3ochXWx47sy67rbuq67nFd1219MN5X\nGMZ03v9ia+2xSPuJ1tpHt0PeXWttv/ubz8MND/sPydbaMyW9SFIn6V/sgPdvfrDf+W2O7+u6bhdJ\ne0n6b5J+VdIf79giFR5i+L7pou9/t26vjGu8Fwr/PNBae7ykv5P0PyR9h6SnSfqPku7ZkeUqrI/t\n1ZdtgrX2xTXnPySxWdLPPdgv/XaVhYf9h6SkH5V0nqQ/k/RGJ06pKH/YWjttasE6v7W2L65/b2vt\nmql2622ttY/RHN1a+7HW2lVTS+cHWmt74VrXWvvXrbXrJF33oNSyMIeu677Wdd3fSDpJ0htba4eS\nftRa26219ndTy+VXW2sf9wLSWntOa+3TU7l4T2vtXXhug0WDWqrW2qtaa1dOn/18a+2Xp5qxv5e0\nR1nBHpporb1gqs2+o7V2SWvteFx783Ss39la+0xr7adx7fjW2i2ttV9trd0m6U93RPkL66O19mut\ntRum/Xpla+1f4tqbphaN/zFdA65urX0Prn+0tfabrbVPTq//r9bad0yvndZa+zcL77q0tXbig1e7\nwgo4QJK6rvurruu2dl33ja7rPth13aWttX1ba2e01r7SWru9tfY/W2tP8IOttSNba5+ays67JD1q\nh9WiIC3vy7e21v7SN7bWnjldszdP///R1tp/ba2dLeluSfuMjG8//+OttZsknRHyfNN0rbiztfbZ\n1trJeP/g3rGw3fDfJf0yx6zRWjuotfah6b7vmtba63BtjnbK/V5r7axp8iXTPdxJaf1vrT1xurf8\n8rSP/6619vQHuL47FN8uH5L/c/rv5a213XHthzXRWj1R0vWS/qs0+ciQ9F5J/07SkyRdI+kYPzTd\nEPx7Sa+R9GRJH5f0VwvvPVHS8yU9a7vXqLAyuq77pKRbNLFKE780TX+ypN016c+utfYISe/TRPHw\nHZr067/U6vhjST89tYoeKumMruvukvRKSbc+EFawwv1Da+1pkk6T9F806fNflnRKa+3J01u+JOnV\nkh4v6c2Sfq+19hxk8dTpc3tJ+qkHq9yF+40bNJkXdtVkHfjL1tp34vrzJX1G0m6SfkPSqd5MTvGj\nkn5M0h6S7pX0B9P0P5f0I76ptfZsTSwkpz8w1SjcR1wraWtr7c9ba69srT0R15qk39Skbw+W9AxJ\nb5Wk6Rrxfkl/ocm4f4+kH3gQy13YiGV9uQreoMncvYukG6dpQ+PbOE4T2Xg5E6eK4z+Q9MrpPuAY\nSRdPr62ydyzcf1wo6aOarOU9pn3zIUnvlPQUTb4B3tZaO2Qsw67rXjz9+ezpHu5d0/8vrv+bNFEo\n7yVpT0nfkPR/38/6PKTxsP6QbK0dq0lnvrvruos02Ti8Hrec2nXdJ7uuu1eTD80jpumvknRF13Wn\nTq/9gaTb8NxPS/rNruuuml7/PyQdsaBZ+s2u677add03HpjaFdbArZoMdGKLpO+UtFfXdVu6rvt4\n13WdpBdoQov4g2n6qZI+uca7tkh6Vmvt8V3X/WPXdZ/aHhUobFe8f2p5vKO19n5NNv2nd113etd1\n27qu+5AmC9GrJKnrutO6rruhm+Bjkj6oecXENkm/0XXdPTXeH3JgX98h6W2+0HXde7quu3Xa5+/S\nhD1yNJ79kqTfn84D79JEoXgCrv9F13WXTxVF/0HS69rE2cb/krR/a23/6X1vkPSuruu+9cBVs7Au\nuq77uqRjNTn28nZJX26t/U1rbfeu667vuu5D0zH9ZUn/pyYfDtJkjdhZM9l4r6QLdkQdChMs68sV\ns/izruuu6Lru3q7rtkzThsa38dau6+4amPO3STq0tfboruu+0HXdFdP0VfaOhe2D/13Sv4FCWJoo\nhD/Xdd2fTvv6U5JOkfSD9+M9c+t/13Vf6brulK7r7u667k5NDFTHjeTxzxoP6w9JTaisH+y67vbp\n/98p0Fs1/3F4t6THTX/vIelmX5h+YNBRyl6S/i9sTr6qiQbzabjnZhUeKniaJn1E/HdNrNAfnFJQ\nfm2avoekz0/73FinL39Akw+QG9uEDv3C+1rowgOGE7uue8L034majOfXLnxwHKuJokFTDfd5UyrM\nHZr0727I78td133zQa9FYRWwr58g6V/5QmvtR1trF6PPD9V8vy7OAzdqMj8YNy9c21nSbl3X3SPp\n3ZJ+pE3o8j+sifWq8BDDdEP/pq7rnq5J/+8h6fdba09prf11mxxP+Lqkv9RMNtIacaMKOxRDfbni\n42mNj+N75BlNPzxPkvQWSV9oE6r7QdPLq+wdC9sBXdddrsm52V9D8l6Snr+w1p+siVXxvmJu/W+t\nPaa19v+01m6czh1nSXpCexh79H3Yfki21h4t6XWSjmut3TblL/+CpGdPqUbL8AVJPae5tdb4f00m\nkJ/mBqXrukd3XXcO7uEiU9hBaBOvbU+TNHeuseu6O7uu+6Wu6/aR9H2SfrFNzkB9QdLTpn1uPAO/\n75L0GOQ/NwF1XXdB13Xfrwlt4v2abCilkoeHMm7WRPvM8fzYruv+W5t4ej5F0u9I2n36MXK6Jou/\nUX37zwxTC8DbJf2MpCdN+/Vyzffr4jywpybsBuMZC9e2SLLS8s812aB8j6S7u647d/vWoLC90XXd\n1ZocaThUE1prJ+nwruserwlrwbKQ1og9H8SiFkaw0Jdza7byR0Oaw5eN76Fn/P4PdF33Mk2UkVdr\nMtdIq+0dC9sPvyHpJzX7UL9Z0scW2v9xXdf9b9Prq8jKIhbl4JckHSjp+dO5w5TYpocpHrYfkpqc\nUdyqyRnFI6b/DtaEk/6jI8+eJumw1tqJbXJ4+l9rXqD+SNK/M6+6tbZra+2127n8hfuB1trjW2uv\nlvTXkv6y67rLFq6/urW233Qz8HVNZGWrpHOnf3+mtba5tfb9mqe7XSLpkNbaEa21R2l6bmaa5yNa\naye31nad0mOcryR9UdKTWmu7PiAVLtwf/KWk72utvby1tlNr7VHTQ/RPl/QISY+U9GVJ97bWXinp\ne3dkYQvbBY/VZAPwZWniUEmTTSfxFEk/21rbeTq/H6z5c44/0lp7VmvtMZL+k6T3dlP3/9MPx22S\nfldljXxIok2cbvzSdJyrtfYMTazH52lyVu6fJN0xPUP9b/HouZqcmfvZ6RrxGs2vEYUHGSN9ebGk\nF7dJrMddNfF9sQoGx/dIWXZvrf2L6Xm8ezSRIz9Xe8cHEV3XXS/pXZJ+dpr0d5IOaK29YTqv79xa\nO6q1dvD0+sWSXjO1Ku4n6ccXsvyipH1GXruLJuci72iTM/W/sV0q8xDGw/lD8o2S/rSbxPe5zf80\nOfR6sibn4CKmVNjXSvptSV/R5GP0Qk1dSXdd9z5JvyXpr6em68s1caZS2PH429banZponn5dk7Mt\nbw737S/pw5pM8udKelvXdR+dnmN6jSYTyB2aaKL/TrO+v1aTReXDmpypWoxJ9wZJn5vKxVumz1tD\n+leSPjOlVJTX1ocIuq67WdL3a+IE4cuayM6/lbRpesbhZzWxLP+jJmes/2YHFbWwndB13ZWafOSd\nq8nm4DBJZy/cdr4m88Ttmpxz+cGu676C63+hidXjNk28dv7swvP/3zTfv1ThoYg7NXGodH5r7S5N\nPjou18Si8B8lPUfS1zRRLJ/qh7BGvEmTOeEkXi/sEAz2ZTc58/4uSZdKukiT9XwVjI3vIWzSRIZu\n1YS6epymlPraO+4Q/CdNFIearuffK+mHNOmf2zTpD8eY/z1J39JkTfhzTXynEG+V9OfTPdzrlPH7\nkh6tybpxnqR/2F4VeaiizdP8CwnTcy63SDq567ozd3R5Cg8uWmvnS/qjrusqtEOh8G2A1tqbJP1E\n13XHDlz/qCZMh3csyeNHJf3UUB6FQuGhiVXGd6FQmODhbJG8X5jS3J4wPSP17zXhN5+3g4tVeBDQ\nWjuutfbUKW3pjZIO17eBVqlQKGwfTOlw/0rS/7ujy1IoFAqFwgOF+pAcxgs1CRdyuybOWE4ccPNc\nePjhQE3OQn5NE4rKD3Zd94UdW6RCofDPAa21l2tCkf6iJp7CC4VCoVB4WKKorYVCoVAoFAqFQqFQ\nWAtlkSwUCoVCoVAoFAqFwlqoD8lCoVAoFAqFQqFQKKyFwRAYCY973OO6Jz3pSZKkrVsnYXF22WWX\n/rrT7r777j5t110nYfMYu/eee+6RJD3iEY/o0/jMTjvtJEnatm3b0vLMxwNeDaby3pdn7wvcJt/8\n5jf7NP72dVKMUxk3bdr4ze/rbq/F+9y+vO5n7r333j7N7exn77jjDt19990bGuiJT3xi97SnPW2u\n3F//+tf761/84hc3lJvvXizDzjvv3Kc97nGP638/6lGPGqwX65fkI7Uj73Ma6+80yqPLyLqMyUy6\nntJSGRN4zfls2bKlT3MffOMbs6O7d91114bnfR/zYTu6nX3tm9/8prZs2RIrSxlYVp9V+4H3petj\nbZrab1W6fmrfMaR3s9xuS7YvZW3xvsXfy96X+m6sfdK84bSUt+t000036Stf+cqGzHfbbbfumc98\n5mB5Dc/xknT77ZMY3o985CP7NP/mHMD+WFbGB2vuThiT9WX3EZQZ12fz5s0bnqHsfOtb35I037Ye\n22xHrqUJaS71e5x255136hvf+MaGhn7kIx/ZPfrRj5Y0k9skv5xzEsbmxdTXSSZSfqtevz9pY2Vk\n2y6bE6WZLKQ1ie3oud9yIM32ElwXmLdlirKVypjq9/Wvf/32ruuevHjPrrvu2u2+++6SpBtvvHGu\nDqzH4x//+D7NazrLOTaOU9m9RjPN8je0liyTtVXn17E5ddV1KK27Q2VM+Sx7z9B96RnLFfcLd955\np6RZ/91zzz1xH7DLLrv03wGe2ymnrhf3U6mP/HuoTdJ4T/PKsjWOuC9r/Niau7huMo33pb0q01yv\ntAdKSOXh2Eq/uf76uyy9g+W+4YYb4hywiLU+JJ/0pCfpV3/1VyXNPiBe8pKX9Ne/9rWvSZI+9alP\n9WmvfvWrJc1X/DOf+Ywk6RnPeEafdvHFF/e/n/CEJ0iaCTaxzsfF4gZZmjVq+tgZ26AmpMmLZXSb\nXH311X0af99xxx2S5hcRl5GTpT+0WFdff+xjH9un8cPe7csJ3cL05S9/uU/zxuMxj3mMJOntb397\nrOvTnvY0vfe9750r94c+9KH++u///u9Lmp9AXDa2rcv9nd/5nX3acccd1//ed999Jc3kgPVi3l5Q\n2XapHbnx8kfXV7/61Q3P7LXXXn1amgzZ9kn20od9kq20OaDc+jfTXI5bb721T/MYvOyyy/q0888/\nv//telsGpVn/J5nxYn/hhRdqCJQBI7V/2uzwg9fXOeHxmTQG0gTN540xpUxq31U+rngfn6diyGON\n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\n6RnfMTP9V8qeubmOpZisicpvjHmubq31zznP5BU7xVPnvsv7fNYvxR5NR6DSUZUUm1eajZHUJsui\nOPB9TON7klf+dOTBazfrwme8H+Bc41igPPLC541EER+LDJBibyYq7aooi2ShUCgUCoVCoVAoFNbC\nWhbJnXfeubd42InO+973vv66tS60PlrLfskll/Rp6dA4NUxJy5G0munwfdKwUDuRHCjYKpisj/xi\nT9rRZGlK2sF0aF6aaU9poUgaHedDjYU1UbSs0CJlDR21XNZoJK2bseywsevmfFieE044QdK8Zema\na66RNB/3yfVLcRulbJF0HajptXxQjng9WRWTlSE5bPD1ZLXhvSy3NTmsv50pMR/2l9NZV2u8Ujw4\nattd/2TdkGb9SE2trZfJOrRu/KCkxfb7k3Y0WcvpgIda1nPPPVfSvJMuxyDjfWZEpH6XZlbZVMaj\njjqqT3NsRZY7xW5NseBSW3IucR/zcH2KGce2cN/SkmTrP/vTzoocu02alxtbYumQa5mTkO1lkaRW\n02XkmEuyxjkwOcNITkt8Hy1Fad4ci22btPBjMfqSc46k6U4aYcpCss67vJwr3K+sn+s9ZLmzFZfX\nbQFgH9k6kKyjRGttQ1uleMBMS32dLJJjcec8pviM52GWiYymFKPTbcJnuEYaKVY0kSyyHmdjcSIT\nIyo5daLceq2lBcdWL65xrOsyByJpDVzFyVICmRNuf8qu163k3GbIAubryUkKx67fQ8YC28DyZwdu\nLA/nV+eZ4rQSTEuOdTw/33rrrX2a5YLOEMki8Thm37pNuQamOcnzgvca0nw7u67J2pnmxWUOmpzu\nd6bYk6k/PYY4NlNMc8ofmVZGssCnuJ1jcR29T07MNCLtcVhXyxz3fC43ZcIO9QiypLw/ZpqfoSM9\n9xf3QP5+4TzLvVaKYZri3brclMtVURbJQqFQKBQKhUKhUCishfqQLBQKhUKhUCgUCoXCWliL2nrb\nbbfpt37rtyRJxx9//NxfSTrllFMkSbvvvnufZporTbt2/kGzKmkJNtWOxQNLpuixw7MpTk+ietn0\nS9N/ilOTHCiM0WtJe1tG2+A101oSjSg5zpFmpnzm47LRFO96pfg/RNd1G+g8pJA4Fh+pzY4bRTqe\n6Uhs70QfJB3WZSP1I8VHYv3dzuw3m+/TAW62U6INkx6YKFVub1IoTGFjuYkUv8/lYVwgv4dUYrcJ\n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\n",
"text/plain": [
"<Figure size 1152x2304 with 7 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Quit? Enter Y:\n",
"Y\n"
]
}
],
"source": [
"num_map = len(label_map)\n",
"X2, Y2 = np.array(X), np.array(Y)\n",
"while True:\n",
" fig, axes = plt.subplots(1, num_map, figsize=(16, 32),subplot_kw={'xticks': [], 'yticks': []})\n",
" fig.subplots_adjust(hspace=0.3, wspace=0.05)\n",
" i=0\n",
" for ax, i in zip(axes.flat, np.linspace(0, num_map, num_map, endpoint=False)):\n",
" x, y = X2[Y2==i], Y2[Y2==i]\n",
" N = len(y)\n",
" j = np.random.choice(N)\n",
" ax.imshow(x[j].reshape(48, 48), cmap='gray')\n",
" ax.set_title(label_map[y[j]])\n",
" plt.show()\n",
" prompt = input('Quit? Enter Y:\\n')\n",
" if prompt == 'Y':\n",
" break"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(X2[0].reshape(48,48), cmap='gray')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def flatten_matrix(matrix):\n",
" vector = matrix.flatten(order='F')\n",
" vector = vector.reshape(1, len(vector))\n",
" return vector\n",
"\n",
"def zca_whitening(inputs): \n",
" sigma = np.dot(inputs, inputs.T)/inputs.shape[1] #Correlation matrix\n",
" U,S,V = np.linalg.svd(sigma) #Singular Value Decomposition\n",
" epsilon = 0.1 #Whitening constant, it prevents division by zero\n",
" ZCAMatrix = np.dot(np.dot(U, np.diag(1.0/np.sqrt(np.diag(S) + epsilon))), U.T) #ZCA Whitening matrix\n",
" return np.dot(ZCAMatrix, inputs) #Data whitening\n",
"\n",
"def global_contrast_normalize(X, scale=1., subtract_mean=True, use_std=True,\n",
" sqrt_bias=10, min_divisor=1e-8):\n",
"\n",
" \"\"\"\n",
" __author__ = \"David Warde-Farley\"\n",
" __copyright__ = \"Copyright 2012, Universite de Montreal\"\n",
" __credits__ = [\"David Warde-Farley\"]\n",
" __license__ = \"3-clause BSD\"\n",
" __email__ = \"wardefar@iro\"\n",
" __maintainer__ = \"David Warde-Farley\"\n",
" .. [1] A. Coates, H. Lee and A. Ng. \"An Analysis of Single-Layer\n",
" Networks in Unsupervised Feature Learning\". AISTATS 14, 2011.\n",
" http://www.stanford.edu/~acoates/papers/coatesleeng_aistats_2011.pdf\n",
" \"\"\"\n",
" assert X.ndim == 2, \"X.ndim must be 2\"\n",
" scale = float(scale)\n",
" assert scale >= min_divisor\n",
"\n",
" mean = X.mean(axis=1)\n",
" if subtract_mean:\n",
" X = X - mean[:, np.newaxis] \n",
" else:\n",
" X = X.copy()\n",
" if use_std:\n",
" ddof = 1\n",
" if X.shape[1] == 1:\n",
" ddof = 0\n",
" normalizers = np.sqrt(sqrt_bias + X.var(axis=1, ddof=ddof)) / scale\n",
" else:\n",
" normalizers = np.sqrt(sqrt_bias + (X ** 2).sum(axis=1)) / scale\n",
" normalizers[normalizers < min_divisor] = 1.\n",
" X /= normalizers[:, np.newaxis] # Does not make a copy.\n",
" return X\n",
"\n",
"def ZeroCenter(data):\n",
" data = data - np.mean(data,axis=0)\n",
" return data\n",
"\n",
"def Zerocenter_ZCA_whitening_Global_Contrast_Normalize(data):\n",
" numpy_data = np.array(data).reshape(48,48)\n",
" data2 = ZeroCenter(numpy_data)\n",
" data3 = zca_whitening(flatten_matrix(data2)).reshape(48,48)\n",
" data4 = global_contrast_normalize(data3)\n",
" data5 = np.rot90(data4,3)\n",
" return data5"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAP4AAAD8CAYAAABXXhlaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvFvnyVgAAIABJREFUeJztnWuMX9dVxdeu83YyfsevsR3beUsJ\nieJERUEqKlSUQkk+FKklRUaKlC8gFRVEU5AQSCC1XygfQFQRrWIqRAqlUqoKhKwQF1VFadykeTRO\nYsc2jd+O7XESt03i5PBh/kZz11nju/P3+D9jzvpJkX1Ozr333HPv9p29Zu99opQCY0xbfGC2J2CM\nGT02fGMaxIZvTIPY8I1pEBu+MQ1iwzemQWz4xjSIDd+YBjknw4+Ij0bESxGxKyIenKlJGWPOLzFs\n5F5EzAPwMoCPANgH4EkAnyqlvDDdMZdffnkZGxvrO2/V94EPdP99UnPmPnUeZt68eb3X4jYAnD59\n+qzt6eZ4ySWX9M6J563Ow2Pefffdasx7773Xex7u42OmOy5z7gx8H2qteUzmuar58DN66623qjHq\nfciQOS5zHxdddFHvedUaTWViYgKnTp3qXaSL+gachbsA7Cql7AaAiHgEwD0ApjX8sbEx3HfffZ0+\nfkjKOK644opOWz00fvkzi3bllVdWY+bPn99pX3755dWYEydOdNpHjhypxrzzzjtV3/j4eO8cuU/9\no8JjTp48WY352c9+1mmrfxx++tOfnrUN6Pvg9VfPg1EvLPfx2gPAxRdf3GmzcSjUvR49erTT3rNn\nTzVmwYIFVV/mHxp+j9S98jO79NJLqzGLFi3qtBcuXFiNueyyy846vy9/+ctnn+yZOaZGaVYDeHVK\ne9+gzxgzxzkXw1f/FFY/Y0XEAxGxPSK2qy+KMWb0nIvh7wOwZkp7HMABHlRKeaiUsqmUskn92GyM\nGT3n4uM/CeC6iFgPYD+ATwL4rbMdEBG9AobyqdiHzAhuCvYXM8KZOi/7+HxeAFizZk3Vx36d8vP4\n3pS/ymNYAwFya8Z9StxTfTwntUZ8XEYAVevYd211HqUDrF+/vtNeunRpNea5556r+lhzUjoEP8fM\nB+7tt9+u+t54443eMawnsFieFVqHNvxSyumI+D0A/wFgHoCvllJ+NOz5jDGj41y++Cil/BuAf5uh\n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\ngg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(Zerocenter_ZCA_whitening_Global_Contrast_Normalize(X2[0]).reshape(48,48), cmap='gray')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.1046998300429187"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.max(Zerocenter_ZCA_whitening_Global_Contrast_Normalize(X2[0]))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"6.7461468510209166e-19"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.mean(Zerocenter_ZCA_whitening_Global_Contrast_Normalize(X2[0]))"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-0.13043074, -0.14608953, -0.09246534, ..., -0.06875412,\n",
" -0.0006757 , 0.00868841],\n",
" [-0.10555388, -0.07140234, -0.059157 , ..., -0.26193642,\n",
" -0.15473589, -0.03219822],\n",
" [-0.08067703, -0.03820803, -0.11744659, ..., -0.29413347,\n",
" -0.30068765, -0.1548581 ],\n",
" ..., \n",
" [-0.11384617, -0.03820803, 0.07407636, ..., -0.39072462,\n",
" -0.12230217, 0.18041224],\n",
" [-0.08896931, 0.07797204, 0.34887015, ..., -0.09290191,\n",
" 0.01554116, 0.06592969],\n",
" [ 0.20955296, 0.40161653, 0.35719724, ..., -0.05265559,\n",
" -0.06554315, 0.06592969]])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Zerocenter_ZCA_whitening_Global_Contrast_Normalize(X2[0])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment