Skip to content

Instantly share code, notes, and snippets.

@jmxpearson
Created February 20, 2017 18:07
Show Gist options
  • Save jmxpearson/f616efd047e66a44040314354d3bfe6e to your computer and use it in GitHub Desktop.
Save jmxpearson/f616efd047e66a44040314354d3bfe6e to your computer and use it in GitHub Desktop.
Example of Poisson GLM in TensorFlow/Edward
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Run model on fake data\n",
"\n",
"Here, we generate a synthetic data set for purposes of validating the model constructed in Edward."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import numpy as np\n",
"import scipy.stats as stats\n",
"import pandas as pd\n",
"import tensorflow as tf\n",
"import edward as ed\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# we'll want this function below\n",
"def softplus(x):\n",
" return np.logaddexp(0, x)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ed.set_seed(12225)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The model is defined by the spike count $N_{us}$ observed when stimulus $s$ is presented to unit $u$:\n",
"\n",
"$$\n",
"\\begin{align}\n",
"N &\\sim \\mathrm{Poisson}(e^\\lambda) \\\\\n",
"\\lambda_{su} &\\sim \\mathcal{N}(A_{u} + (B \\cdot X)_{su}, \\sigma^2) \\\\\n",
"\\log \\sigma &\\sim \\mathcal{N}(-7, 1^2)\n",
"\\end{align}\n",
"$$\n",
"With $X$ an $P \\times N_s$ matrix of known regressors, $A$ and $N_u$ vector of baselines, and $(\\cdot)_+$ the softplus function: \n",
"$(x)_+ = \\log(1 + e^x)$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In addition, we assume that $A$, $B$, and $C$ are all hierarchically distributed:\n",
"\n",
"$$\\begin{align}\n",
"A_u &\\sim \\mathcal{N}(\\mu_A, \\sigma^2_A) \\\\\n",
"B_{up} &\\sim \\mathcal{N}(\\mu_{Bp}, \\sigma^2_{Bp}) \\\\\n",
"\\mu_A &\\sim \\mathcal{N}(\\log 25, 0.5^2) \\\\\n",
"\\sigma_A &\\sim \\mathrm{Ga}(2, 4) \\\\\n",
"\\mu_{Bp} &\\sim \\mathcal{N}(0, 0.5^2) \\\\\n",
"\\sigma_{Bp} &\\sim \\mathrm{Ga}(2, 4) \\\\\n",
"\\end{align}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Define constants"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# basic constants\n",
"Nrep = 40 # number of observations per unit per stim\n",
"NB = 1000 # number of trials in minibatch\n",
"NU = 50 # number of units\n",
"NS = 50 # number of stims\n",
"P = 3 # number of specified regressors"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Make neural response coefficients"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"dA = np.log(softplus(25 + 5 * np.random.randn(NU))) # baseline\n",
"dB = np.log(np.array([0.75, 1.2, 1.5]) + 0.1 * np.random.randn(NU, P)) # regressor effects"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Regressors and latent states"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1292e19b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dX = np.sin(np.arange(NS)/5. + 2.5 * np.arange(P)[:, np.newaxis]) + np.random.rand(P, NS)\n",
"\n",
"# plot X\n",
"plt.figure()\n",
"plt.plot(dX.T);"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(3, 50)"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dX.shape"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 76.01148779, 17.9540787 , 26.59600809])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"evals, evecs = np.linalg.eig(dX.dot(dX.T))\n",
"evals\n",
"# vvv = evecs.T.dot(dX)\n",
"# plt.plot(vvv.T);\n",
"# evecs.T"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Generate trial set"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"dU, dS = np.meshgrid(range(NU), range(NS))\n",
"dU = dU.ravel()\n",
"dS = dS.ravel()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(array([ 0, 1, 2, ..., 47, 48, 49]), array([ 0, 0, 0, ..., 49, 49, 49]))"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dU, dS"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"dlam_mean = np.tile(dA[dU] + np.sum(dB[dU] * dX[:, dS].T, axis=1), Nrep)\n",
"\n",
"dlam = stats.norm.rvs(loc=dlam_mean, scale=0.01)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(100000,)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dcount = stats.poisson.rvs(np.exp(dlam))\n",
"dcount.shape"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1292e1518>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(dlam, bins=200);"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n5+e38gAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x12cc69cc0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(np.exp(dlam), bins=200);"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x12cc69a90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(dcount, bins=200);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Set up data"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"count = dcount.copy()\n",
"Xdat = np.tile(dX[:, dS], (1, Nrep)).T\n",
"unit = np.tile(dU, Nrep)\n",
"stim = np.tile(dS, Nrep)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Later, we'll need to know the number of observations of each (stim, unit) pair. This is constant for this toy example, but need not be."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"pairs = pd.DataFrame({'stim': stim, 'unit': unit, 'count': 1})"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>stim</th>\n",
" <th>unit</th>\n",
" <th>count</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>40</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" stim unit count\n",
"0 0 0 40\n",
"1 0 1 40\n",
"2 0 2 40\n",
"3 0 3 40\n",
"4 0 4 40"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# count the number of occurrences of each pair\n",
"pair_counts_df_long = pairs.groupby(['stim', 'unit']).sum().reset_index()\n",
"pair_counts_df_long.head()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>unit</th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" <th>6</th>\n",
" <th>7</th>\n",
" <th>8</th>\n",
" <th>9</th>\n",
" <th>...</th>\n",
" <th>40</th>\n",
" <th>41</th>\n",
" <th>42</th>\n",
" <th>43</th>\n",
" <th>44</th>\n",
" <th>45</th>\n",
" <th>46</th>\n",
" <th>47</th>\n",
" <th>48</th>\n",
" <th>49</th>\n",
" </tr>\n",
" <tr>\n",
" <th>stim</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>...</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>...</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>...</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>...</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>...</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 50 columns</p>\n",
"</div>"
],
"text/plain": [
"unit 0 1 2 3 4 5 6 7 8 9 ... 40 41 42 43 44 45 46 \\\n",
"stim ... \n",
"0 40 40 40 40 40 40 40 40 40 40 ... 40 40 40 40 40 40 40 \n",
"1 40 40 40 40 40 40 40 40 40 40 ... 40 40 40 40 40 40 40 \n",
"2 40 40 40 40 40 40 40 40 40 40 ... 40 40 40 40 40 40 40 \n",
"3 40 40 40 40 40 40 40 40 40 40 ... 40 40 40 40 40 40 40 \n",
"4 40 40 40 40 40 40 40 40 40 40 ... 40 40 40 40 40 40 40 \n",
"\n",
"unit 47 48 49 \n",
"stim \n",
"0 40 40 40 \n",
"1 40 40 40 \n",
"2 40 40 40 \n",
"3 40 40 40 \n",
"4 40 40 40 \n",
"\n",
"[5 rows x 50 columns]"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pair_counts_df = pair_counts_df_long.pivot(values='count', index='stim', columns='unit')\n",
"pair_counts_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"pair_counts = pair_counts_df.values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We'd also like to know a unique code for each *possible* (stim, unit) pair. (Some might be missing, but in this case, we still want to code that, since we'll be using these codes to sum over all observations, and the resulting matrix may have some 0 entries, but it must be dense.\n",
"\n",
"We will assume that units and stims are consecutively numbered."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 1, 2, ..., 2497, 2498, 2499])"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# assuming an array stims x units, these are codes laid out in (C) memory order\n",
"# this is necessary so that after aggregating, we can reshape these codes to get\n",
"# an NS x NU array\n",
"su_codes = NU * stim + unit\n",
"su_codes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# GLM"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import statsmodels.api as sm\n",
"import statsmodels.formula.api as smf\n",
"Xdf = pd.DataFrame(Xdat)\n",
"Xdf.columns = ['X' + str(c) for c in Xdf.columns]\n",
"dta = pd.concat([pd.DataFrame({'count': count, 'unit': unit, 'stim': stim}), Xdf], axis=1)\n",
"formula = 'count ~ -1 + C(unit) + C(unit) * (' + '+'.join(Xdf.columns) + ')'\n",
"mod = smf.glm(formula=formula, data=dta, family=sm.families.Poisson()).fit()"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>count</th>\n",
" <th>stim</th>\n",
" <th>unit</th>\n",
" <th>X0</th>\n",
" <th>X1</th>\n",
" <th>X2</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>17</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>21</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>20</td>\n",
" <td>0</td>\n",
" <td>5</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>19</td>\n",
" <td>0</td>\n",
" <td>6</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>20</td>\n",
" <td>0</td>\n",
" <td>7</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>21</td>\n",
" <td>0</td>\n",
" <td>8</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>16</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>20</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" <td>11</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>13</td>\n",
" <td>0</td>\n",
" <td>12</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>15</td>\n",
" <td>0</td>\n",
" <td>13</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>34</td>\n",
" <td>0</td>\n",
" <td>14</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>17</td>\n",
" <td>0</td>\n",
" <td>15</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>16</td>\n",
" <td>0</td>\n",
" <td>16</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>10</td>\n",
" <td>0</td>\n",
" <td>17</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>18</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>15</td>\n",
" <td>0</td>\n",
" <td>19</td>\n",
" <td>0.471434</td>\n",
" <td>0.845368</td>\n",
" <td>-0.615358</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" count stim unit X0 X1 X2\n",
"0 29 0 0 0.471434 0.845368 -0.615358\n",
"1 18 0 1 0.471434 0.845368 -0.615358\n",
"2 17 0 2 0.471434 0.845368 -0.615358\n",
"3 21 0 3 0.471434 0.845368 -0.615358\n",
"4 29 0 4 0.471434 0.845368 -0.615358\n",
"5 20 0 5 0.471434 0.845368 -0.615358\n",
"6 19 0 6 0.471434 0.845368 -0.615358\n",
"7 20 0 7 0.471434 0.845368 -0.615358\n",
"8 21 0 8 0.471434 0.845368 -0.615358\n",
"9 16 0 9 0.471434 0.845368 -0.615358\n",
"10 20 0 10 0.471434 0.845368 -0.615358\n",
"11 11 0 11 0.471434 0.845368 -0.615358\n",
"12 13 0 12 0.471434 0.845368 -0.615358\n",
"13 15 0 13 0.471434 0.845368 -0.615358\n",
"14 34 0 14 0.471434 0.845368 -0.615358\n",
"15 17 0 15 0.471434 0.845368 -0.615358\n",
"16 16 0 16 0.471434 0.845368 -0.615358\n",
"17 10 0 17 0.471434 0.845368 -0.615358\n",
"18 9 0 18 0.471434 0.845368 -0.615358\n",
"19 15 0 19 0.471434 0.845368 -0.615358"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dta.head(20)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"count 28.450080\n",
"stim 24.500000\n",
"unit 24.500000\n",
"X0 0.704797\n",
"X1 0.284299\n",
"X2 0.585620\n",
"dtype: float64"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dta.mean()"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'count ~ -1 + C(unit) + C(unit) * (X0+X1+X2)'"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"formula"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([['X0', 'C(unit)[T.1]:X0', 'C(unit)[T.2]:X0', 'C(unit)[T.3]:X0',\n",
" 'C(unit)[T.4]:X0', 'C(unit)[T.5]:X0', 'C(unit)[T.6]:X0',\n",
" 'C(unit)[T.7]:X0', 'C(unit)[T.8]:X0', 'C(unit)[T.9]:X0',\n",
" 'C(unit)[T.10]:X0', 'C(unit)[T.11]:X0', 'C(unit)[T.12]:X0',\n",
" 'C(unit)[T.13]:X0', 'C(unit)[T.14]:X0', 'C(unit)[T.15]:X0',\n",
" 'C(unit)[T.16]:X0', 'C(unit)[T.17]:X0', 'C(unit)[T.18]:X0',\n",
" 'C(unit)[T.19]:X0', 'C(unit)[T.20]:X0', 'C(unit)[T.21]:X0',\n",
" 'C(unit)[T.22]:X0', 'C(unit)[T.23]:X0', 'C(unit)[T.24]:X0',\n",
" 'C(unit)[T.25]:X0', 'C(unit)[T.26]:X0', 'C(unit)[T.27]:X0',\n",
" 'C(unit)[T.28]:X0', 'C(unit)[T.29]:X0', 'C(unit)[T.30]:X0',\n",
" 'C(unit)[T.31]:X0', 'C(unit)[T.32]:X0', 'C(unit)[T.33]:X0',\n",
" 'C(unit)[T.34]:X0', 'C(unit)[T.35]:X0', 'C(unit)[T.36]:X0',\n",
" 'C(unit)[T.37]:X0', 'C(unit)[T.38]:X0', 'C(unit)[T.39]:X0',\n",
" 'C(unit)[T.40]:X0', 'C(unit)[T.41]:X0', 'C(unit)[T.42]:X0',\n",
" 'C(unit)[T.43]:X0', 'C(unit)[T.44]:X0', 'C(unit)[T.45]:X0',\n",
" 'C(unit)[T.46]:X0', 'C(unit)[T.47]:X0', 'C(unit)[T.48]:X0',\n",
" 'C(unit)[T.49]:X0'],\n",
" ['X1', 'C(unit)[T.1]:X1', 'C(unit)[T.2]:X1', 'C(unit)[T.3]:X1',\n",
" 'C(unit)[T.4]:X1', 'C(unit)[T.5]:X1', 'C(unit)[T.6]:X1',\n",
" 'C(unit)[T.7]:X1', 'C(unit)[T.8]:X1', 'C(unit)[T.9]:X1',\n",
" 'C(unit)[T.10]:X1', 'C(unit)[T.11]:X1', 'C(unit)[T.12]:X1',\n",
" 'C(unit)[T.13]:X1', 'C(unit)[T.14]:X1', 'C(unit)[T.15]:X1',\n",
" 'C(unit)[T.16]:X1', 'C(unit)[T.17]:X1', 'C(unit)[T.18]:X1',\n",
" 'C(unit)[T.19]:X1', 'C(unit)[T.20]:X1', 'C(unit)[T.21]:X1',\n",
" 'C(unit)[T.22]:X1', 'C(unit)[T.23]:X1', 'C(unit)[T.24]:X1',\n",
" 'C(unit)[T.25]:X1', 'C(unit)[T.26]:X1', 'C(unit)[T.27]:X1',\n",
" 'C(unit)[T.28]:X1', 'C(unit)[T.29]:X1', 'C(unit)[T.30]:X1',\n",
" 'C(unit)[T.31]:X1', 'C(unit)[T.32]:X1', 'C(unit)[T.33]:X1',\n",
" 'C(unit)[T.34]:X1', 'C(unit)[T.35]:X1', 'C(unit)[T.36]:X1',\n",
" 'C(unit)[T.37]:X1', 'C(unit)[T.38]:X1', 'C(unit)[T.39]:X1',\n",
" 'C(unit)[T.40]:X1', 'C(unit)[T.41]:X1', 'C(unit)[T.42]:X1',\n",
" 'C(unit)[T.43]:X1', 'C(unit)[T.44]:X1', 'C(unit)[T.45]:X1',\n",
" 'C(unit)[T.46]:X1', 'C(unit)[T.47]:X1', 'C(unit)[T.48]:X1',\n",
" 'C(unit)[T.49]:X1'],\n",
" ['X2', 'C(unit)[T.1]:X2', 'C(unit)[T.2]:X2', 'C(unit)[T.3]:X2',\n",
" 'C(unit)[T.4]:X2', 'C(unit)[T.5]:X2', 'C(unit)[T.6]:X2',\n",
" 'C(unit)[T.7]:X2', 'C(unit)[T.8]:X2', 'C(unit)[T.9]:X2',\n",
" 'C(unit)[T.10]:X2', 'C(unit)[T.11]:X2', 'C(unit)[T.12]:X2',\n",
" 'C(unit)[T.13]:X2', 'C(unit)[T.14]:X2', 'C(unit)[T.15]:X2',\n",
" 'C(unit)[T.16]:X2', 'C(unit)[T.17]:X2', 'C(unit)[T.18]:X2',\n",
" 'C(unit)[T.19]:X2', 'C(unit)[T.20]:X2', 'C(unit)[T.21]:X2',\n",
" 'C(unit)[T.22]:X2', 'C(unit)[T.23]:X2', 'C(unit)[T.24]:X2',\n",
" 'C(unit)[T.25]:X2', 'C(unit)[T.26]:X2', 'C(unit)[T.27]:X2',\n",
" 'C(unit)[T.28]:X2', 'C(unit)[T.29]:X2', 'C(unit)[T.30]:X2',\n",
" 'C(unit)[T.31]:X2', 'C(unit)[T.32]:X2', 'C(unit)[T.33]:X2',\n",
" 'C(unit)[T.34]:X2', 'C(unit)[T.35]:X2', 'C(unit)[T.36]:X2',\n",
" 'C(unit)[T.37]:X2', 'C(unit)[T.38]:X2', 'C(unit)[T.39]:X2',\n",
" 'C(unit)[T.40]:X2', 'C(unit)[T.41]:X2', 'C(unit)[T.42]:X2',\n",
" 'C(unit)[T.43]:X2', 'C(unit)[T.44]:X2', 'C(unit)[T.45]:X2',\n",
" 'C(unit)[T.46]:X2', 'C(unit)[T.47]:X2', 'C(unit)[T.48]:X2',\n",
" 'C(unit)[T.49]:X2']], \n",
" dtype='<U16')"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"names = mod.model.exog_names[NU:]\n",
"nn = np.array(names)\n",
"nn.reshape(P, NU)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"A_init = mod.params.values[:NU].astype('float32')\n",
"B_init = mod.params.values[NU:].reshape(P, NU).T.astype('float32')\n",
"\n",
"# add main effects back in, since other rows are treatment contrasted with them\n",
"main_effects = B_init[0, :].copy()\n",
"B_init[1:, :] += main_effects"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x10368f5c0>"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nrkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x12d810f28>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(dA.ravel(), A_init)\n",
"plt.xlabel('actual')\n",
"plt.ylabel('inferred')"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x10eaddb00>"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1036c09e8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(dB.ravel(), B_init.ravel())\n",
"plt.xlabel('actual')\n",
"plt.ylabel('inferred')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Define the model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Constants"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# define some needed constants\n",
"N = Xdat.shape[0] # number of trials"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"100000"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"N"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Inputs and data"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"X = tf.constant(Xdat.astype('float32'))\n",
"U = tf.constant(unit)\n",
"S = tf.constant(stim)\n",
"counts = tf.constant(count)\n",
"allinds = tf.constant(np.arange(N))\n",
"NSU = tf.constant(pair_counts.astype('float32'))\n",
"codes_SU = tf.constant(su_codes)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"TensorShape([Dimension(100000), Dimension(3)])"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X.get_shape()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Make a node that produces `NB` indices from the range $[0, N - 1]$. These are the subset of data points we want to use."
]
},
{
"cell_type": "raw",
"metadata": {
"collapsed": true
},
"source": [
"batch_inds = tf.train.range_input_producer(N).dequeue_many(NB, name='batch_inds')\n",
"batch_counts = tf.train.batch(tf.train.slice_input_producer([counts]), NB, name='batch_counts')"
]
},
{
"cell_type": "raw",
"metadata": {
"collapsed": true
},
"source": [
"batch_inds = tf.constant(np.arange(NB))\n",
"batch_counts = tf.train.batch(tf.train.slice_input_producer([counts]), NB)"
]
},
{
"cell_type": "raw",
"metadata": {
"collapsed": false
},
"source": [
"batch_inds, batch_counts = tf.train.batch(tf.train.slice_input_producer([allinds, counts]), NB, \n",
" name='batches')"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"NB = N\n",
"batch_inds = np.arange(N)\n",
"batch_counts = counts"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Generative (p) model"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"with tf.variable_scope(\"pmodel\"):\n",
" muA = ed.models.Normal(mu=np.log(25) * tf.ones(1), sigma=0.5 * tf.ones(1), name='mu_A')\n",
" muB = ed.models.Normal(mu=tf.zeros(P), sigma=0.5 * tf.ones(P), name='mu_B')\n",
" sigA = ed.models.Gamma(alpha=2. * tf.ones(1), beta=4. * tf.ones(1), name='sig_A')\n",
" sigB = ed.models.Gamma(alpha=2. * tf.ones(P), beta=4. * tf.ones(P), name='sig_B')\n",
"\n",
" A = ed.models.Normal(mu=tf.tile(muA, (NU,)), \n",
" sigma=tf.tile(sigA, (NU,)), \n",
" name='A')\n",
" B = ed.models.Normal(mu=tf.tile(tf.expand_dims(muB, 0), (NU, 1)), \n",
" sigma=tf.tile(tf.expand_dims(sigB, 0), (NU, 1)), \n",
" name='B')\n",
"\n",
" sig = ed.models.Normal(mu=[-7.0], sigma=[1.], name='sig')\n",
"\n",
" lam_vars = (tf.gather(A, U) + tf.reduce_sum(tf.gather(B, U) * X, 1))\n",
" lam = ed.models.Normal(mu=tf.gather(lam_vars, batch_inds), \n",
" sigma=tf.exp(sig), name='lam')\n",
"\n",
" cnt = ed.models.Poisson(lam=tf.exp(lam), value=tf.ones(NB), name='cnt')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Recognition (q) model"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"with tf.variable_scope(\"qmodel\"):\n",
" # population means\n",
" q_muA = ed.models.NormalWithSoftplusSigma(mu=tf.Variable(np.log(25) * tf.ones(1)), \n",
" sigma=tf.Variable(0.5 * tf.ones(1)),\n",
" name='mu_A')\n",
" tf.scalar_summary('q_muA', tf.reduce_mean(q_muA.mean()))\n",
"\n",
" q_muB = ed.models.NormalWithSoftplusSigma(mu=tf.Variable(tf.zeros(P)), \n",
" sigma=tf.Variable(0.5 * tf.ones(P)),\n",
" name='mu_B')\n",
" tf.scalar_summary('q_muB', tf.reduce_mean(q_muB.mean()))\n",
"\n",
"\n",
" # population standard deviations\n",
" q_sigA = ed.models.GammaWithSoftplusAlphaBeta(alpha=tf.Variable(2. * tf.ones(1)), \n",
" beta=tf.Variable(4. * tf.ones(1)),\n",
" name='sig_A')\n",
" tf.scalar_summary('q_sigA', tf.reduce_mean(q_sigA.mean()))\n",
"\n",
" q_sigB = ed.models.GammaWithSoftplusAlphaBeta(alpha=tf.Variable(2. * tf.ones(P)), \n",
" beta=tf.Variable(4. * tf.ones(P)),\n",
" name='sig_B')\n",
" tf.scalar_summary('q_sigB', tf.reduce_mean(q_sigB.mean()))\n",
"\n",
" \n",
" # individual unit coefficients\n",
" q_A = ed.models.NormalWithSoftplusSigma(mu=tf.Variable(np.log(25) + tf.random_normal((NU,))), \n",
" sigma=tf.Variable(0.5 + tf.random_uniform((NU,))),\n",
" name='A')\n",
" tf.scalar_summary('q_A', tf.reduce_mean(q_A.mean()))\n",
"\n",
" q_B = ed.models.NormalWithSoftplusSigma(mu=tf.Variable(tf.random_normal((NU, P))), \n",
" sigma=tf.Variable(0.5 + tf.random_uniform((NU, P))),\n",
" name='B')\n",
" tf.scalar_summary('q_B', tf.reduce_mean(q_B.mean()))\n",
"\n",
" # log firing rates\n",
" lam_mu = tf.Variable(2 + tf.random_normal((N,)))\n",
" tf.scalar_summary('lam_mu_mean', tf.reduce_mean(tf.gather(lam_mu, batch_inds)))\n",
" lam_sig = tf.Variable(3 * tf.random_uniform((N,)) + 2)\n",
" q_lam = ed.models.NormalWithSoftplusSigma(mu=tf.gather(lam_mu, batch_inds),\n",
" sigma=tf.gather(lam_sig, batch_inds),\n",
" name='lam')\n",
"\n",
" q_sig = ed.models.NormalWithSoftplusSigma(mu=tf.Variable(-0.1 * tf.random_uniform((1,))),\n",
" sigma=tf.Variable(tf.random_uniform((1,))),\n",
" name='sig')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# ELBO"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def make_ELBO(latent_vars, data, scale):\n",
" from edward.util import copy\n",
" p_log_prob = 0.0\n",
" q_log_prob = 0.0\n",
" z_sample = {}\n",
" scope = \"ELBO\"\n",
"\n",
" for z, qz in latent_vars.items():\n",
" # Copy q(z) to obtain new set of posterior samples.\n",
" qz_copy = copy(qz, scope=scope)\n",
" z_sample[z] = qz_copy.value()\n",
" z_log_prob = tf.reduce_sum(qz.log_prob(tf.stop_gradient(z_sample[z])))\n",
" if z in scale:\n",
" z_log_prob *= scale[z]\n",
"\n",
" q_log_prob += z_log_prob\n",
"\n",
" dict_swap = z_sample\n",
" for x, qx in data.items():\n",
" if isinstance(x, ed.RandomVariable):\n",
" if isinstance(qx, ed.RandomVariable):\n",
" qx_copy = copy(qx, scope=scope)\n",
" dict_swap[x] = qx_copy.value()\n",
" else:\n",
" dict_swap[x] = qx\n",
"\n",
" for z in latent_vars.keys():\n",
" z_copy = copy(z, dict_swap, scope=scope)\n",
" z_log_prob = tf.reduce_sum(z_copy.log_prob(dict_swap[z]))\n",
" if z in scale:\n",
" z_log_prob *= scale[z]\n",
"\n",
" p_log_prob += z_log_prob\n",
"\n",
" for x in data.keys():\n",
" if isinstance(x, ed.RandomVariable):\n",
" x_copy = copy(x, dict_swap, scope=scope)\n",
" x_log_prob = tf.reduce_sum(x_copy.log_prob(dict_swap[x]))\n",
" if x in scale:\n",
" x_log_prob *= scale[x]\n",
"\n",
" p_log_prob += x_log_prob\n",
"\n",
" return tf.reduce_mean(p_log_prob - q_log_prob)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<tf.Tensor 'ScalarSummary:0' shape=() dtype=string>"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"elbo = make_ELBO({A: q_A, B: q_B, \n",
" muA: q_muA, muB: q_muB, \n",
" sigA: q_sigA, sigB: q_sigB,\n",
" sig: q_sig, lam: q_lam}, \n",
" {cnt: tf.cast(batch_counts, 'float32')}, \n",
" {lam: N/NB, cnt: N/NB})\n",
"\n",
"tf.scalar_summary('ELBO', elbo)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Do variational inference"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"inference_lam = ed.KLqp({lam: q_lam, sig: q_sig}, \n",
" data={cnt: batch_counts, \n",
" A: q_A, B: q_B,\n",
" muA: q_muA, muB: q_muB,\n",
" sigA: q_sigA, sigB: q_sigB})\n",
"inference_coeffs = ed.KLqp({A: q_A, B: q_B}, \n",
" data={cnt: batch_counts, \n",
" lam: q_lam, sig: q_sig,\n",
" muA: q_muA, muB: q_muB,\n",
" sigA: q_sigA, sigB: q_sigB})\n",
"inference_pop = ed.KLqp({muA: q_muA, muB: q_muB,\n",
" sigA: q_sigA, sigB: q_sigB},\n",
" data={cnt: batch_counts, \n",
" lam: q_lam, sig: q_sig,\n",
" A: q_A, B: q_B})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Notes on inference:\n",
"\n",
"- The `logdir` keyword specifies the place to put the log file (assuming you've instrumented the code to save events, etc.). If a subdirectory is given, pointing Tensorboard at the parent directory allows you to compare across subdirectories (runs).\n",
" - ~~I'm using the `jmp/instrumented` branch of the `jmxpearson/edward` fork~~ No longer needed after Edward PR merged.\n",
"- The learning rate is a difficult tradeoff: 1e-2 drastically speeds convergence but can run into NaNs; 1e-3 (the default) is much slower.\n",
" - **TO DO**: Does regularizing emergence of `NaN`s help with this?\n",
" - **Update**: I had to hack TF's implementation of `Beta` to include fudge factors in `logp` and a couple of other places in order to remove NaNs.\n",
"- I'm currently using \"all\" the data, which appears to be faster (run-time, wise) than using minibatches. (Not entirely sure why this is, except perhaps that switching data into and out of the graph has a cost.) I've also found that minibatches need to be fairly substantial to be effective, since most variables ($\\lambda$, $A$, $B$, $C$) are unit-specific (i.e., local), so unless you have several observations from that unit, convergence can be slow.\n",
" - Ultimately, it might speed things to have a smarter minibatch selection (i.e., all observations for a single unit) when updating the local variables.\n",
"- I've used `n_samples` = 1, 5, 10, and 25, which all seem pretty similar after 10k iterations.\n",
" - Follow-up: since adding explicit (non-gradient) optimization steps, this may be moot, since those update operations aren't code to handle multiple samples. Would need `tf.reduce*` sprinkled here and there to work.\n",
"- I've noticed no difference below in how many steps one takes along each coordinate before switching (number of inner loop iterations), either in runtime or convergence. Perhaps this matters in the final stages, but I would suspect that then it favors tighter inner loops.\n",
"- As per Edward documentation and my own experience: it really helps to have separate updates for \"local\" and \"global\" variables. This is why $\\lambda$ and $(A, B, C)$ are updated separately. Same idea with the hierarchy.\n",
"- Updating the discrete pieces ($Z$ and $\\pi$) was terrible. This is most likely because the minima for $Z$ are all near 0 and 1, and it's very hard to get there without making large moves."
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Initialize each (Edward) inference step\n",
"debug = False\n",
"inf_list = [inference_lam, inference_coeffs, inference_pop]\n",
"\n",
"for inf in inf_list:\n",
" if inf is inference_lam:\n",
" logdir = 'data/run7'\n",
" else:\n",
" logdir = None\n",
" \n",
" inf.initialize(n_print=100, n_samples=1, \n",
" logdir=logdir,\n",
" optimizer=tf.train.AdamOptimizer(1e-3),\n",
" scale={lam: N/NB, cnt: N/NB},\n",
" debug=debug)"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"init = tf.initialize_all_variables()\n",
"init.run({})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# If you get `NaN`s...\n",
"![learning rate advice](1jseeo.jpg)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration 120100 [12010%]: Loss = 315817.562\n",
"Iteration 120200 [12020%]: Loss = 313728.219\n",
"Iteration 120300 [12030%]: Loss = 313495.438\n",
"Iteration 120400 [12040%]: Loss = 314012.406\n",
"Iteration 120500 [12050%]: Loss = 314472.625\n",
"Iteration 120600 [12060%]: Loss = 334021.469\n",
"Iteration 120700 [12070%]: Loss = 316908.625\n",
"Iteration 120800 [12080%]: Loss = 312098.062\n",
"Iteration 120900 [12090%]: Loss = 312963.156\n",
"Iteration 121000 [12100%]: Loss = 311995.938\n",
"Iteration 121100 [12110%]: Loss = 317672.500\n",
"Iteration 121200 [12120%]: Loss = 313251.562\n",
"Iteration 121300 [12130%]: Loss = 311728.500\n",
"Iteration 121400 [12140%]: Loss = 313106.812\n",
"Iteration 121500 [12150%]: Loss = 314042.438\n",
"Iteration 121600 [12160%]: Loss = 311489.438\n",
"Iteration 121700 [12170%]: Loss = 311375.906\n",
"Iteration 121800 [12180%]: Loss = 310852.625\n",
"Iteration 121900 [12190%]: Loss = 312992.188\n",
"Iteration 122000 [12200%]: Loss = 311639.969\n",
"Iteration 122100 [12210%]: Loss = 312603.531\n",
"Iteration 122200 [12220%]: Loss = 314528.125\n",
"Iteration 122300 [12230%]: Loss = 321542.781\n",
"Iteration 122400 [12240%]: Loss = 311565.594\n",
"Iteration 122500 [12250%]: Loss = 314273.250\n",
"Iteration 122600 [12260%]: Loss = 311290.656\n",
"Iteration 122700 [12270%]: Loss = 310094.062\n",
"Iteration 122800 [12280%]: Loss = 311613.438\n",
"Iteration 122900 [12290%]: Loss = 311857.688\n",
"Iteration 123000 [12300%]: Loss = 311135.625\n",
"Iteration 123100 [12310%]: Loss = 310372.906\n",
"Iteration 123200 [12320%]: Loss = 315093.562\n",
"Iteration 123300 [12330%]: Loss = 310810.000\n",
"Iteration 123400 [12340%]: Loss = 310116.906\n",
"Iteration 123500 [12350%]: Loss = 310252.531\n",
"Iteration 123600 [12360%]: Loss = 313479.719\n",
"Iteration 123700 [12370%]: Loss = 313431.062\n",
"Iteration 123800 [12380%]: Loss = 310287.656\n",
"Iteration 123900 [12390%]: Loss = 309693.812\n",
"Iteration 124000 [12400%]: Loss = 322154.344\n",
"Iteration 124100 [12410%]: Loss = 309610.250\n",
"Iteration 124200 [12420%]: Loss = 312258.625\n",
"Iteration 124300 [12430%]: Loss = 309081.344\n",
"Iteration 124400 [12440%]: Loss = 340672.469\n",
"Iteration 124500 [12450%]: Loss = 309715.812\n",
"Iteration 124600 [12460%]: Loss = 310088.312\n",
"Iteration 124700 [12470%]: Loss = 310541.375\n",
"Iteration 124800 [12480%]: Loss = 312005.906\n",
"Iteration 124900 [12490%]: Loss = 309311.219\n",
"Iteration 125000 [12500%]: Loss = 309944.156\n",
"Iteration 125100 [12510%]: Loss = 308826.562\n",
"Iteration 125200 [12520%]: Loss = 322760.438\n",
"Iteration 125300 [12530%]: Loss = 308395.969\n",
"Iteration 125400 [12540%]: Loss = 313800.094\n",
"Iteration 125500 [12550%]: Loss = 308209.719\n",
"Iteration 125600 [12560%]: Loss = 314999.062\n",
"Iteration 125700 [12570%]: Loss = 309082.750\n",
"Iteration 125800 [12580%]: Loss = 308361.250\n",
"Iteration 125900 [12590%]: Loss = 311345.000\n",
"Iteration 126000 [12600%]: Loss = 309048.812\n",
"Iteration 126100 [12610%]: Loss = 308330.281\n",
"Iteration 126200 [12620%]: Loss = 309051.312\n",
"Iteration 126300 [12630%]: Loss = 308406.312\n",
"Iteration 126400 [12640%]: Loss = 309805.906\n",
"Iteration 126500 [12650%]: Loss = 315507.281\n",
"Iteration 126600 [12660%]: Loss = 308346.062\n",
"Iteration 126700 [12670%]: Loss = 308261.062\n",
"Iteration 126800 [12680%]: Loss = 313252.750\n",
"Iteration 126900 [12690%]: Loss = 307979.938\n",
"Iteration 127000 [12700%]: Loss = 309071.719\n",
"Iteration 127100 [12710%]: Loss = 311173.594\n",
"Iteration 127200 [12720%]: Loss = 308029.625\n",
"Iteration 127300 [12730%]: Loss = 308237.438\n",
"Iteration 127400 [12740%]: Loss = 308025.219\n",
"Iteration 127500 [12750%]: Loss = 309426.281\n",
"Iteration 127600 [12760%]: Loss = 309182.125\n",
"Iteration 127700 [12770%]: Loss = 307728.625\n",
"Iteration 127800 [12780%]: Loss = 308023.938\n",
"Iteration 127900 [12790%]: Loss = 308652.688\n",
"Iteration 128000 [12800%]: Loss = 307933.781\n",
"Iteration 128100 [12810%]: Loss = 308978.344\n",
"Iteration 128200 [12819%]: Loss = 308417.906\n",
"Iteration 128300 [12830%]: Loss = 308139.469\n",
"Iteration 128400 [12840%]: Loss = 307802.875\n",
"Iteration 128500 [12850%]: Loss = 307596.750\n",
"Iteration 128600 [12860%]: Loss = 307761.031\n",
"Iteration 128700 [12869%]: Loss = 307630.562\n",
"Iteration 128800 [12880%]: Loss = 308708.250\n",
"Iteration 128900 [12890%]: Loss = 309741.406\n",
"Iteration 129000 [12900%]: Loss = 308906.688\n",
"Iteration 129100 [12910%]: Loss = 308672.125\n",
"Iteration 129200 [12919%]: Loss = 319492.875\n",
"Iteration 129300 [12930%]: Loss = 308972.594\n",
"Iteration 129400 [12940%]: Loss = 307633.938\n",
"Iteration 129500 [12950%]: Loss = 307615.062\n",
"Iteration 129600 [12960%]: Loss = 307790.062\n",
"Iteration 129700 [12969%]: Loss = 307200.312\n",
"Iteration 129800 [12980%]: Loss = 309028.625\n",
"Iteration 129900 [12990%]: Loss = 309982.000\n",
"Iteration 130000 [13000%]: Loss = 307814.531\n",
"Iteration 130100 [13010%]: Loss = 396299.719\n",
"Iteration 130200 [13019%]: Loss = 307531.062\n",
"Iteration 130300 [13030%]: Loss = 309073.438\n",
"Iteration 130400 [13040%]: Loss = 307863.031\n",
"Iteration 130500 [13050%]: Loss = 308163.125\n",
"Iteration 130600 [13060%]: Loss = 318605.250\n",
"Iteration 130700 [13069%]: Loss = 307382.812\n",
"Iteration 130800 [13080%]: Loss = 307360.375\n",
"Iteration 130900 [13090%]: Loss = 307618.875\n",
"Iteration 131000 [13100%]: Loss = 307699.688\n",
"Iteration 131100 [13110%]: Loss = 308267.750\n",
"Iteration 131200 [13119%]: Loss = 308934.719\n",
"Iteration 131300 [13130%]: Loss = 307783.625\n",
"Iteration 131400 [13140%]: Loss = 338276.469\n",
"Iteration 131500 [13150%]: Loss = 307384.812\n",
"Iteration 131600 [13160%]: Loss = 307702.375\n",
"Iteration 131700 [13169%]: Loss = 307682.594\n",
"Iteration 131800 [13180%]: Loss = 307312.250\n",
"Iteration 131900 [13190%]: Loss = 310938.000\n",
"Iteration 132000 [13200%]: Loss = 307199.000\n",
"Iteration 132100 [13210%]: Loss = 307197.000\n",
"Iteration 132200 [13219%]: Loss = 307126.781\n",
"Iteration 132300 [13230%]: Loss = 307917.938\n",
"Iteration 132400 [13240%]: Loss = 307682.938\n",
"Iteration 132500 [13250%]: Loss = 307773.844\n",
"Iteration 132600 [13260%]: Loss = 307853.719\n",
"Iteration 132700 [13269%]: Loss = 307173.812\n",
"Iteration 132800 [13280%]: Loss = 308181.656\n",
"Iteration 132900 [13290%]: Loss = 307215.281\n",
"Iteration 133000 [13300%]: Loss = 307372.062\n",
"Iteration 133100 [13310%]: Loss = 307584.406\n",
"Iteration 133200 [13319%]: Loss = 309608.625\n",
"Iteration 133300 [13330%]: Loss = 308039.844\n",
"Iteration 133400 [13340%]: Loss = 307205.000\n",
"Iteration 133500 [13350%]: Loss = 308097.312\n",
"Iteration 133600 [13360%]: Loss = 307236.281\n",
"Iteration 133700 [13369%]: Loss = 307189.719\n",
"Iteration 133800 [13380%]: Loss = 307143.188\n",
"Iteration 133900 [13390%]: Loss = 307110.531\n",
"Iteration 134000 [13400%]: Loss = 307511.594\n",
"Iteration 134100 [13410%]: Loss = 311174.844\n",
"Iteration 134200 [13419%]: Loss = 356934.406\n",
"Iteration 134300 [13430%]: Loss = 306901.250\n",
"Iteration 134400 [13440%]: Loss = 307395.281\n",
"Iteration 134500 [13450%]: Loss = 308099.031\n",
"Iteration 134600 [13460%]: Loss = 306991.281\n",
"Iteration 134700 [13469%]: Loss = 309053.781\n",
"Iteration 134800 [13480%]: Loss = 308267.250\n",
"Iteration 134900 [13490%]: Loss = 307718.906\n",
"Iteration 135000 [13500%]: Loss = 306987.750\n",
"Iteration 135100 [13510%]: Loss = 307271.000\n",
"Iteration 135200 [13519%]: Loss = 307149.656\n",
"Iteration 135300 [13530%]: Loss = 307042.500\n",
"Iteration 135400 [13540%]: Loss = 306873.500\n",
"Iteration 135500 [13550%]: Loss = 311594.438\n",
"Iteration 135600 [13560%]: Loss = 306938.188\n",
"Iteration 135700 [13569%]: Loss = 306952.688\n",
"Iteration 135800 [13580%]: Loss = 306839.250\n",
"Iteration 135900 [13590%]: Loss = 306969.938\n",
"Iteration 136000 [13600%]: Loss = 307210.688\n",
"Iteration 136100 [13610%]: Loss = 307056.281\n",
"Iteration 136200 [13619%]: Loss = 306828.125\n",
"Iteration 136300 [13630%]: Loss = 307062.250\n",
"Iteration 136400 [13640%]: Loss = 307147.094\n",
"Iteration 136500 [13650%]: Loss = 306935.312\n",
"Iteration 136600 [13660%]: Loss = 307557.375\n",
"Iteration 136700 [13669%]: Loss = 307034.562\n",
"Iteration 136800 [13680%]: Loss = 306919.562\n",
"Iteration 136900 [13690%]: Loss = 309119.781\n",
"Iteration 137000 [13700%]: Loss = 307851.938\n",
"Iteration 137100 [13710%]: Loss = 308098.750\n",
"Iteration 137200 [13719%]: Loss = 307070.125\n",
"Iteration 137300 [13730%]: Loss = 306944.656\n",
"Iteration 137400 [13740%]: Loss = 306919.969\n",
"Iteration 137500 [13750%]: Loss = 306940.562\n",
"Iteration 137600 [13760%]: Loss = 306826.250\n",
"Iteration 137700 [13769%]: Loss = 306936.500\n",
"Iteration 137800 [13780%]: Loss = 307475.188\n",
"Iteration 137900 [13790%]: Loss = 306841.844\n",
"Iteration 138000 [13800%]: Loss = 306847.625\n",
"Iteration 138100 [13810%]: Loss = 307433.812\n",
"Iteration 138200 [13819%]: Loss = 307088.625\n",
"Iteration 138300 [13830%]: Loss = 306958.438\n",
"Iteration 138400 [13840%]: Loss = 307039.062\n",
"Iteration 138500 [13850%]: Loss = 306779.500\n",
"Iteration 138600 [13860%]: Loss = 306755.250\n",
"Iteration 138700 [13869%]: Loss = 306720.562\n",
"Iteration 138800 [13880%]: Loss = 308238.531\n",
"Iteration 138900 [13890%]: Loss = 306841.750\n",
"Iteration 139000 [13900%]: Loss = 307191.781\n",
"Iteration 139100 [13910%]: Loss = 306900.719\n",
"Iteration 139200 [13919%]: Loss = 307026.562\n",
"Iteration 139300 [13930%]: Loss = 307242.625\n",
"Iteration 139400 [13940%]: Loss = 306861.438\n",
"Iteration 139500 [13950%]: Loss = 308940.281\n",
"Iteration 139600 [13960%]: Loss = 308044.438\n",
"Iteration 139700 [13969%]: Loss = 315061.812\n",
"Iteration 139800 [13980%]: Loss = 314810.688\n",
"Iteration 139900 [13990%]: Loss = 307277.688\n",
"Iteration 140000 [14000%]: Loss = 306758.250\n",
"Iteration 140100 [14010%]: Loss = 307003.906\n",
"Iteration 140200 [14019%]: Loss = 306948.438\n",
"Iteration 140300 [14030%]: Loss = 306680.562\n",
"Iteration 140400 [14040%]: Loss = 307641.562\n",
"Iteration 140500 [14050%]: Loss = 306768.625\n",
"Iteration 140600 [14060%]: Loss = 306927.375\n",
"Iteration 140700 [14069%]: Loss = 307375.406\n",
"Iteration 140800 [14080%]: Loss = 306789.156\n",
"Iteration 140900 [14090%]: Loss = 314897.188\n",
"Iteration 141000 [14100%]: Loss = 308467.250\n",
"Iteration 141100 [14110%]: Loss = 307052.688\n",
"Iteration 141200 [14119%]: Loss = 309746.562\n",
"Iteration 141300 [14130%]: Loss = 307178.938\n",
"Iteration 141400 [14140%]: Loss = 307894.625\n",
"Iteration 141500 [14150%]: Loss = 307347.688\n",
"Iteration 141600 [14160%]: Loss = 306975.156\n",
"Iteration 141700 [14169%]: Loss = 307603.344\n",
"Iteration 141800 [14180%]: Loss = 306835.031\n",
"Iteration 141900 [14190%]: Loss = 307852.625\n",
"Iteration 142000 [14200%]: Loss = 307105.188\n",
"Iteration 142100 [14210%]: Loss = 307494.156\n",
"Iteration 142200 [14219%]: Loss = 306832.188\n",
"Iteration 142300 [14230%]: Loss = 307074.031\n",
"Iteration 142400 [14240%]: Loss = 307930.594\n",
"Iteration 142500 [14250%]: Loss = 337951.594\n",
"Iteration 142600 [14260%]: Loss = 307016.531\n",
"Iteration 142700 [14269%]: Loss = 306942.188\n",
"Iteration 142800 [14280%]: Loss = 307062.094\n",
"Iteration 142900 [14290%]: Loss = 307265.312\n",
"Iteration 143000 [14300%]: Loss = 308748.281\n",
"Iteration 143100 [14310%]: Loss = 306753.875\n",
"Iteration 143200 [14319%]: Loss = 307617.094\n",
"Iteration 143300 [14330%]: Loss = 306826.719\n",
"Iteration 143400 [14340%]: Loss = 306636.594\n",
"Iteration 143500 [14350%]: Loss = 307056.094\n",
"Iteration 143600 [14360%]: Loss = 308811.906\n",
"Iteration 143700 [14369%]: Loss = 306798.406\n",
"Iteration 143800 [14380%]: Loss = 306686.906\n",
"Iteration 143900 [14390%]: Loss = 310597.500\n",
"Iteration 144000 [14400%]: Loss = 307049.625\n",
"Iteration 144100 [14410%]: Loss = 306984.094\n",
"Iteration 144200 [14419%]: Loss = 307035.906\n",
"Iteration 144300 [14430%]: Loss = 309946.031\n",
"Iteration 144400 [14440%]: Loss = 307011.750\n",
"Iteration 144500 [14450%]: Loss = 306764.250\n",
"Iteration 144600 [14460%]: Loss = 308343.531\n",
"Iteration 144700 [14469%]: Loss = 307022.500\n",
"Iteration 144800 [14480%]: Loss = 308046.594\n",
"Iteration 144900 [14490%]: Loss = 307432.594\n",
"Iteration 145000 [14500%]: Loss = 347516.062\n",
"Iteration 145100 [14510%]: Loss = 307276.375\n",
"Iteration 145200 [14519%]: Loss = 306579.438\n",
"Iteration 145300 [14530%]: Loss = 309263.312\n",
"Iteration 145400 [14540%]: Loss = 307460.469\n",
"Iteration 145500 [14550%]: Loss = 307127.688\n",
"Iteration 145600 [14560%]: Loss = 307587.812\n",
"Iteration 145700 [14569%]: Loss = 306667.406\n",
"Iteration 145800 [14580%]: Loss = 306809.719\n",
"Iteration 145900 [14590%]: Loss = 306796.438\n",
"Iteration 146000 [14600%]: Loss = 306920.875\n",
"Iteration 146100 [14610%]: Loss = 306714.281\n",
"Iteration 146200 [14619%]: Loss = 306712.562\n",
"Iteration 146300 [14630%]: Loss = 306887.156\n",
"Iteration 146400 [14640%]: Loss = 308023.156\n",
"Iteration 146500 [14650%]: Loss = 306595.812\n",
"Iteration 146600 [14660%]: Loss = 306816.875\n",
"Iteration 146700 [14669%]: Loss = 307171.781\n",
"Iteration 146800 [14680%]: Loss = 307648.312\n",
"Iteration 146900 [14690%]: Loss = 306869.594\n",
"Iteration 147000 [14700%]: Loss = 307520.938\n",
"Iteration 147100 [14710%]: Loss = 306676.125\n",
"Iteration 147200 [14719%]: Loss = 307379.094\n",
"Iteration 147300 [14730%]: Loss = 306850.688\n",
"Iteration 147400 [14740%]: Loss = 307613.406\n",
"Iteration 147500 [14750%]: Loss = 307285.344\n",
"Iteration 147600 [14760%]: Loss = 307608.188\n",
"Iteration 147700 [14769%]: Loss = 313396.219\n",
"Iteration 147800 [14780%]: Loss = 306739.531\n",
"Iteration 147900 [14790%]: Loss = 307027.406\n",
"Iteration 148000 [14800%]: Loss = 306832.938\n",
"Iteration 148100 [14810%]: Loss = 306667.750\n",
"Iteration 148200 [14819%]: Loss = 306684.375\n",
"Iteration 148300 [14830%]: Loss = 309044.281\n",
"Iteration 148400 [14840%]: Loss = 307322.312\n",
"Iteration 148500 [14850%]: Loss = 307074.688\n",
"Iteration 148600 [14860%]: Loss = 306810.406\n",
"Iteration 148700 [14869%]: Loss = 307078.312\n",
"Iteration 148800 [14880%]: Loss = 306782.562\n",
"Iteration 148900 [14890%]: Loss = 308560.594\n",
"Iteration 149000 [14900%]: Loss = 306949.375\n",
"Iteration 149100 [14910%]: Loss = 307217.938\n",
"Iteration 149200 [14919%]: Loss = 306750.375\n",
"Iteration 149300 [14930%]: Loss = 306752.906\n",
"Iteration 149400 [14940%]: Loss = 306725.375\n",
"Iteration 149500 [14950%]: Loss = 307482.969\n",
"Iteration 149600 [14960%]: Loss = 306754.250\n",
"Iteration 149700 [14969%]: Loss = 306643.750\n",
"Iteration 149800 [14980%]: Loss = 306776.438\n",
"Iteration 149900 [14990%]: Loss = 306990.312\n",
"Iteration 150000 [15000%]: Loss = 307496.031\n",
"Iteration 150100 [15010%]: Loss = 307464.781\n",
"Iteration 150200 [15019%]: Loss = 306920.562\n",
"Iteration 150300 [15030%]: Loss = 306631.594\n",
"Iteration 150400 [15040%]: Loss = 306725.938\n",
"Iteration 150500 [15050%]: Loss = 309934.219\n",
"Iteration 150600 [15060%]: Loss = 307481.562\n",
"Iteration 150700 [15069%]: Loss = 308621.656\n",
"Iteration 150800 [15080%]: Loss = 307572.688\n",
"Iteration 150900 [15090%]: Loss = 306911.156\n",
"Iteration 151000 [15100%]: Loss = 306659.844\n",
"Iteration 151100 [15110%]: Loss = 351847.906\n",
"Iteration 151200 [15119%]: Loss = 306964.719\n",
"Iteration 151300 [15130%]: Loss = 308689.000\n",
"Iteration 151400 [15140%]: Loss = 306800.219\n",
"Iteration 151500 [15150%]: Loss = 306608.125\n",
"Iteration 151600 [15160%]: Loss = 306738.281\n",
"Iteration 151700 [15169%]: Loss = 307193.219\n",
"Iteration 151800 [15180%]: Loss = 307210.312\n",
"Iteration 151900 [15190%]: Loss = 307870.594\n",
"Iteration 152000 [15200%]: Loss = 307661.188\n",
"Iteration 152100 [15210%]: Loss = 306707.406\n",
"Iteration 152200 [15219%]: Loss = 307583.312\n",
"Iteration 152300 [15230%]: Loss = 307047.625\n",
"Iteration 152400 [15240%]: Loss = 306956.844\n",
"Iteration 152500 [15250%]: Loss = 306670.750\n",
"Iteration 152600 [15260%]: Loss = 307847.594\n",
"Iteration 152700 [15269%]: Loss = 306626.250\n",
"Iteration 152800 [15280%]: Loss = 306663.031\n",
"Iteration 152900 [15290%]: Loss = 306594.031\n",
"Iteration 153000 [15300%]: Loss = 307563.688\n",
"Iteration 153100 [15310%]: Loss = 306800.969\n",
"Iteration 153200 [15319%]: Loss = 306774.938\n",
"Iteration 153300 [15330%]: Loss = 307391.031\n",
"Iteration 153400 [15340%]: Loss = 314670.156\n",
"Iteration 153500 [15350%]: Loss = 306806.562\n",
"Iteration 153600 [15360%]: Loss = 306899.719\n",
"Iteration 153700 [15369%]: Loss = 306661.562\n",
"Iteration 153800 [15380%]: Loss = 307486.750\n",
"Iteration 153900 [15390%]: Loss = 307474.312\n",
"Iteration 154000 [15400%]: Loss = 307054.438\n",
"Iteration 154100 [15410%]: Loss = 307103.125\n",
"Iteration 154200 [15419%]: Loss = 306744.438\n",
"Iteration 154300 [15430%]: Loss = 306838.781\n",
"Iteration 154400 [15440%]: Loss = 317831.750\n",
"Iteration 154500 [15450%]: Loss = 307214.188\n",
"Iteration 154600 [15460%]: Loss = 307585.500\n",
"Iteration 154700 [15469%]: Loss = 307521.812\n",
"Iteration 154800 [15480%]: Loss = 306624.375\n",
"Iteration 154900 [15490%]: Loss = 306832.906\n",
"Iteration 155000 [15500%]: Loss = 306636.750\n",
"Iteration 155100 [15510%]: Loss = 306688.875\n",
"Iteration 155200 [15519%]: Loss = 307109.281\n",
"Iteration 155300 [15530%]: Loss = 306859.688\n",
"Iteration 155400 [15540%]: Loss = 307076.188\n",
"Iteration 155500 [15550%]: Loss = 457047.812\n",
"Iteration 155600 [15560%]: Loss = 307356.438\n",
"Iteration 155700 [15569%]: Loss = 306917.094\n",
"Iteration 155800 [15580%]: Loss = 306667.188\n",
"Iteration 155900 [15590%]: Loss = 310301.469\n",
"Iteration 156000 [15600%]: Loss = 307451.531\n",
"Iteration 156100 [15610%]: Loss = 306585.312\n",
"Iteration 156200 [15619%]: Loss = 306778.125\n",
"Iteration 156300 [15630%]: Loss = 309771.562\n",
"Iteration 156400 [15640%]: Loss = 307774.438\n",
"Iteration 156500 [15650%]: Loss = 320832.375\n",
"Iteration 156600 [15660%]: Loss = 306787.500\n",
"Iteration 156700 [15669%]: Loss = 306703.188\n",
"Iteration 156800 [15680%]: Loss = 311289.812\n",
"Iteration 156900 [15690%]: Loss = 307783.250\n",
"Iteration 157000 [15700%]: Loss = 307717.594\n",
"Iteration 157100 [15710%]: Loss = 308633.531\n",
"Iteration 157200 [15719%]: Loss = 307520.438\n",
"Iteration 157300 [15730%]: Loss = 307163.312\n",
"Iteration 157400 [15740%]: Loss = 306745.938\n",
"Iteration 157500 [15750%]: Loss = 306620.812\n",
"Iteration 157600 [15760%]: Loss = 306688.531\n",
"Iteration 157700 [15769%]: Loss = 307043.438\n",
"Iteration 157800 [15780%]: Loss = 306991.781\n",
"Iteration 157900 [15790%]: Loss = 307046.938\n",
"Iteration 158000 [15800%]: Loss = 306958.406\n",
"Iteration 158100 [15810%]: Loss = 307266.125\n",
"Iteration 158200 [15819%]: Loss = 306894.812\n",
"Iteration 158300 [15830%]: Loss = 306728.250\n",
"Iteration 158400 [15840%]: Loss = 306519.781\n",
"Iteration 158500 [15850%]: Loss = 306634.562\n",
"Iteration 158600 [15860%]: Loss = 307038.625\n",
"Iteration 158700 [15869%]: Loss = 306796.375\n",
"Iteration 158800 [15880%]: Loss = 306834.750\n",
"Iteration 158900 [15890%]: Loss = 307298.812\n",
"Iteration 159000 [15900%]: Loss = 306992.875\n",
"Iteration 159100 [15910%]: Loss = 308061.625\n",
"Iteration 159200 [15919%]: Loss = 307379.438\n",
"Iteration 159300 [15930%]: Loss = 307203.062\n",
"Iteration 159400 [15940%]: Loss = 306882.562\n",
"Iteration 159500 [15950%]: Loss = 307383.156\n",
"Iteration 159600 [15960%]: Loss = 307683.312\n",
"Iteration 159700 [15969%]: Loss = 307046.750\n",
"Iteration 159800 [15980%]: Loss = 306532.750\n",
"Iteration 159900 [15990%]: Loss = 307721.500\n",
"Iteration 160000 [16000%]: Loss = 310215.812\n",
"Iteration 160100 [16010%]: Loss = 322421.344\n",
"Iteration 160200 [16019%]: Loss = 307242.844\n",
"Iteration 160300 [16030%]: Loss = 308400.688\n",
"Iteration 160400 [16040%]: Loss = 306749.125\n",
"Iteration 160500 [16050%]: Loss = 309090.125\n",
"Iteration 160600 [16060%]: Loss = 312442.844\n",
"Iteration 160700 [16069%]: Loss = 307961.500\n",
"Iteration 160800 [16080%]: Loss = 306733.344\n",
"Iteration 160900 [16090%]: Loss = 306586.125\n",
"Iteration 161000 [16100%]: Loss = 306913.750\n",
"Iteration 161100 [16110%]: Loss = 307680.312\n",
"Iteration 161200 [16119%]: Loss = 306797.812\n",
"Iteration 161300 [16130%]: Loss = 307753.906\n",
"Iteration 161400 [16140%]: Loss = 306824.500\n",
"Iteration 161500 [16150%]: Loss = 306806.875\n",
"Iteration 161600 [16160%]: Loss = 307752.125\n",
"Iteration 161700 [16169%]: Loss = 306589.906\n",
"Iteration 161800 [16180%]: Loss = 307747.375\n",
"Iteration 161900 [16190%]: Loss = 308396.125\n",
"Iteration 162000 [16200%]: Loss = 306855.812\n",
"Iteration 162100 [16210%]: Loss = 309610.500\n",
"Iteration 162200 [16219%]: Loss = 306800.625\n",
"Iteration 162300 [16230%]: Loss = 306879.312\n",
"Iteration 162400 [16240%]: Loss = 307447.250\n",
"Iteration 162500 [16250%]: Loss = 306655.000\n",
"Iteration 162600 [16260%]: Loss = 307206.156\n",
"Iteration 162700 [16269%]: Loss = 306789.188\n",
"Iteration 162800 [16280%]: Loss = 306624.750\n",
"Iteration 162900 [16290%]: Loss = 306765.531\n",
"Iteration 163000 [16300%]: Loss = 306779.125\n",
"Iteration 163100 [16310%]: Loss = 306772.500\n",
"Iteration 163200 [16319%]: Loss = 306556.719\n",
"Iteration 163300 [16330%]: Loss = 307370.125\n",
"Iteration 163400 [16340%]: Loss = 306882.500\n",
"Iteration 163500 [16350%]: Loss = 306607.750\n",
"Iteration 163600 [16360%]: Loss = 306619.344\n",
"Iteration 163700 [16369%]: Loss = 307955.406\n",
"Iteration 163800 [16380%]: Loss = 306678.062\n",
"Iteration 163900 [16390%]: Loss = 321202.375\n",
"Iteration 164000 [16400%]: Loss = 306756.438\n",
"Iteration 164100 [16410%]: Loss = 307225.938\n",
"Iteration 164200 [16420%]: Loss = 306805.500\n",
"Iteration 164300 [16430%]: Loss = 306787.688\n",
"Iteration 164400 [16440%]: Loss = 307426.125\n",
"Iteration 164500 [16450%]: Loss = 306529.312\n",
"Iteration 164600 [16460%]: Loss = 306513.625\n",
"Iteration 164700 [16470%]: Loss = 307072.938\n",
"Iteration 164800 [16480%]: Loss = 306611.875\n",
"Iteration 164900 [16490%]: Loss = 307752.562\n",
"Iteration 165000 [16500%]: Loss = 306684.438\n",
"Iteration 165100 [16510%]: Loss = 306584.125\n",
"Iteration 165200 [16520%]: Loss = 306696.500\n",
"Iteration 165300 [16530%]: Loss = 306944.438\n",
"Iteration 165400 [16540%]: Loss = 307429.844\n",
"Iteration 165500 [16550%]: Loss = 306668.375\n",
"Iteration 165600 [16560%]: Loss = 307499.000\n",
"Iteration 165700 [16570%]: Loss = 306538.625\n",
"Iteration 165800 [16580%]: Loss = 307081.531\n",
"Iteration 165900 [16590%]: Loss = 306637.375\n",
"Iteration 166000 [16600%]: Loss = 306962.719\n",
"Iteration 166100 [16610%]: Loss = 307050.781\n",
"Iteration 166200 [16620%]: Loss = 306615.031\n",
"Iteration 166300 [16630%]: Loss = 307658.062\n",
"Iteration 166400 [16640%]: Loss = 309344.750\n",
"Iteration 166500 [16650%]: Loss = 317229.188\n",
"Iteration 166600 [16660%]: Loss = 306666.125\n",
"Iteration 166700 [16670%]: Loss = 306799.156\n",
"Iteration 166800 [16680%]: Loss = 323833.688\n",
"Iteration 166900 [16690%]: Loss = 306731.656\n",
"Iteration 167000 [16700%]: Loss = 306709.000\n",
"Iteration 167100 [16710%]: Loss = 306503.312\n",
"Iteration 167200 [16720%]: Loss = 306666.750\n",
"Iteration 167300 [16730%]: Loss = 307548.688\n",
"Iteration 167400 [16740%]: Loss = 306793.156\n",
"Iteration 167500 [16750%]: Loss = 306519.250\n",
"Iteration 167600 [16760%]: Loss = 306930.969\n",
"Iteration 167700 [16770%]: Loss = 306571.375\n",
"Iteration 167800 [16780%]: Loss = 306534.406\n",
"Iteration 167900 [16790%]: Loss = 306627.094\n",
"Iteration 168000 [16800%]: Loss = 313940.344\n",
"Iteration 168100 [16810%]: Loss = 306869.562\n",
"Iteration 168200 [16820%]: Loss = 307073.938\n",
"Iteration 168300 [16830%]: Loss = 306654.750\n",
"Iteration 168400 [16840%]: Loss = 306551.250\n",
"Iteration 168500 [16850%]: Loss = 306633.500\n",
"Iteration 168600 [16860%]: Loss = 306743.969\n",
"Iteration 168700 [16870%]: Loss = 309433.812\n",
"Iteration 168800 [16880%]: Loss = 306772.250\n",
"Iteration 168900 [16890%]: Loss = 306570.594\n",
"Iteration 169000 [16900%]: Loss = 309463.938\n",
"Iteration 169100 [16910%]: Loss = 307590.844\n",
"Iteration 169200 [16920%]: Loss = 306539.438\n",
"Iteration 169300 [16930%]: Loss = 306870.594\n",
"Iteration 169400 [16940%]: Loss = 306684.812\n",
"Iteration 169500 [16950%]: Loss = 306635.500\n",
"Iteration 169600 [16960%]: Loss = 308658.375\n",
"Iteration 169700 [16970%]: Loss = 309060.875\n",
"Iteration 169800 [16980%]: Loss = 306999.875\n",
"Iteration 169900 [16990%]: Loss = 308000.938\n",
"Iteration 170000 [17000%]: Loss = 308449.562\n",
"Iteration 170100 [17010%]: Loss = 306655.125\n",
"Iteration 170200 [17020%]: Loss = 306574.500\n",
"Iteration 170300 [17030%]: Loss = 306884.062\n",
"Iteration 170400 [17040%]: Loss = 306726.000\n",
"Iteration 170500 [17050%]: Loss = 306464.875\n",
"Iteration 170600 [17060%]: Loss = 307584.875\n",
"Iteration 170700 [17070%]: Loss = 306777.562\n",
"Iteration 170800 [17080%]: Loss = 307256.531\n",
"Iteration 170900 [17090%]: Loss = 307506.062\n",
"Iteration 171000 [17100%]: Loss = 306880.469\n",
"Iteration 171100 [17110%]: Loss = 306633.438\n",
"Iteration 171200 [17120%]: Loss = 306627.812\n",
"Iteration 171300 [17130%]: Loss = 306512.125\n",
"Iteration 171400 [17140%]: Loss = 306598.062\n",
"Iteration 171500 [17150%]: Loss = 306831.188\n",
"Iteration 171600 [17160%]: Loss = 306574.250\n",
"Iteration 171700 [17170%]: Loss = 308673.625\n",
"Iteration 171800 [17180%]: Loss = 307529.969\n",
"Iteration 171900 [17190%]: Loss = 306632.125\n",
"Iteration 172000 [17200%]: Loss = 307706.938\n",
"Iteration 172100 [17210%]: Loss = 306673.344\n",
"Iteration 172200 [17220%]: Loss = 306866.750\n",
"Iteration 172300 [17230%]: Loss = 306481.125\n",
"Iteration 172400 [17240%]: Loss = 307147.312\n",
"Iteration 172500 [17250%]: Loss = 306443.562\n",
"Iteration 172600 [17260%]: Loss = 309620.656\n",
"Iteration 172700 [17270%]: Loss = 307436.625\n",
"Iteration 172800 [17280%]: Loss = 309738.219\n",
"Iteration 172900 [17290%]: Loss = 306663.625\n",
"Iteration 173000 [17300%]: Loss = 306619.438\n",
"Iteration 173100 [17310%]: Loss = 310361.406\n",
"Iteration 173200 [17320%]: Loss = 306812.875\n",
"Iteration 173300 [17330%]: Loss = 306647.062\n",
"Iteration 173400 [17340%]: Loss = 306631.906\n",
"Iteration 173500 [17350%]: Loss = 307752.875\n",
"Iteration 173600 [17360%]: Loss = 306399.062\n",
"Iteration 173700 [17370%]: Loss = 308214.500\n",
"Iteration 173800 [17380%]: Loss = 306965.625\n",
"Iteration 173900 [17390%]: Loss = 306728.344\n",
"Iteration 174000 [17400%]: Loss = 307216.750\n",
"Iteration 174100 [17410%]: Loss = 306986.312\n",
"Iteration 174200 [17420%]: Loss = 307896.500\n",
"Iteration 174300 [17430%]: Loss = 307820.125\n",
"Iteration 174400 [17440%]: Loss = 309080.000\n",
"Iteration 174500 [17450%]: Loss = 306703.562\n",
"Iteration 174600 [17460%]: Loss = 307198.031\n",
"Iteration 174700 [17470%]: Loss = 311735.500\n",
"Iteration 174800 [17480%]: Loss = 306493.938\n",
"Iteration 174900 [17490%]: Loss = 308356.625\n",
"Iteration 175000 [17500%]: Loss = 306621.969\n",
"Iteration 175100 [17510%]: Loss = 306754.281\n",
"Iteration 175200 [17520%]: Loss = 306682.781\n",
"Iteration 175300 [17530%]: Loss = 309923.188\n",
"Iteration 175400 [17540%]: Loss = 306867.250\n",
"Iteration 175500 [17550%]: Loss = 306736.938\n",
"Iteration 175600 [17560%]: Loss = 306611.500\n",
"Iteration 175700 [17570%]: Loss = 306788.688\n",
"Iteration 175800 [17580%]: Loss = 306756.781\n",
"Iteration 175900 [17590%]: Loss = 306842.219\n",
"Iteration 176000 [17600%]: Loss = 307021.375\n",
"Iteration 176100 [17610%]: Loss = 309658.562\n",
"Iteration 176200 [17620%]: Loss = 306916.312\n",
"Iteration 176300 [17630%]: Loss = 306774.750\n",
"Iteration 176400 [17640%]: Loss = 306973.438\n",
"Iteration 176500 [17650%]: Loss = 306821.125\n",
"Iteration 176600 [17660%]: Loss = 306635.062\n",
"Iteration 176700 [17670%]: Loss = 306765.219\n",
"Iteration 176800 [17680%]: Loss = 306639.156\n",
"Iteration 176900 [17690%]: Loss = 307140.438\n",
"Iteration 177000 [17700%]: Loss = 306660.625\n",
"Iteration 177100 [17710%]: Loss = 306602.625\n",
"Iteration 177200 [17720%]: Loss = 307218.125\n",
"Iteration 177300 [17730%]: Loss = 306965.812\n",
"Iteration 177400 [17740%]: Loss = 306659.219\n",
"Iteration 177500 [17750%]: Loss = 307119.594\n",
"Iteration 177600 [17760%]: Loss = 306449.562\n",
"Iteration 177700 [17770%]: Loss = 306534.281\n",
"Iteration 177800 [17780%]: Loss = 308142.938\n",
"Iteration 177900 [17790%]: Loss = 311946.625\n",
"Iteration 178000 [17800%]: Loss = 306724.094\n",
"Iteration 178100 [17810%]: Loss = 306714.594\n",
"Iteration 178200 [17820%]: Loss = 306456.250\n",
"Iteration 178300 [17830%]: Loss = 306655.562\n",
"Iteration 178400 [17840%]: Loss = 306715.750\n",
"Iteration 178500 [17850%]: Loss = 308456.875\n",
"Iteration 178600 [17860%]: Loss = 307665.531\n",
"Iteration 178700 [17870%]: Loss = 322977.906\n",
"Iteration 178800 [17880%]: Loss = 307674.906\n",
"Iteration 178900 [17890%]: Loss = 306566.875\n",
"Iteration 179000 [17900%]: Loss = 306996.469\n",
"Iteration 179100 [17910%]: Loss = 306480.250\n",
"Iteration 179200 [17920%]: Loss = 306556.406\n",
"Iteration 179300 [17930%]: Loss = 307031.875\n",
"Iteration 179400 [17940%]: Loss = 307232.875\n",
"Iteration 179500 [17950%]: Loss = 306622.594\n",
"Iteration 179600 [17960%]: Loss = 306854.375\n",
"Iteration 179700 [17970%]: Loss = 306581.875\n",
"Iteration 179800 [17980%]: Loss = 306881.938\n",
"Iteration 179900 [17990%]: Loss = 306538.250\n",
"Iteration 180000 [18000%]: Loss = 306679.281\n"
]
}
],
"source": [
"n_iter = 60000\n",
"sess = tf.get_default_session()\n",
"for _ in range(n_iter):\n",
" for inf in inf_list:\n",
" for _ in range(1): # make multiple steps along each set of coords\n",
" info_dict = inf.update()\n",
" if inf is inference_lam:\n",
" inf.print_progress(info_dict)"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x13fb2ba90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(q_A.mean().eval().ravel(), label='inferred'); plt.hist(dA.ravel(), label='actual'), plt.legend();"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x13cacd390>"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\niIhE+v8zieFzcHfhAgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x13cab02b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(dA.ravel(), q_A.mean().eval().ravel())\n",
"plt.xlabel('actual')\n",
"plt.ylabel('inferred')"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x141ad82b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(q_B.mean().eval().ravel(), 100, label='inferred'), plt.hist(dB.ravel(), 100, label='actual'), plt.legend();"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(array([-0.2743171 , 0.19381299, 0.39316082]),\n",
" array([ 0.1278376 , 0.07357212, 0.06326519]))"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dB.mean(0), dB.std(0)"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(array([-0.27179265, 0.19465165, 0.39175063], dtype=float32),\n",
" array([ 0.12693614, 0.07359245, 0.06307648], dtype=float32))"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q_B.mean().eval().mean(0), q_B.mean().eval().std(0)"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x13c9b4780>"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x141eabda0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(dB.ravel(), q_B.mean().eval().ravel())\n",
"plt.xlabel('actual')\n",
"plt.ylabel('inferred')"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x13c8f4048>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(lam_mu.eval(), 200, label='inferred'), plt.hist(dlam, 200, label='actual'), plt.legend();"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x13fd85e48>"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x13f7ba0f0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(dlam.ravel(), lam_mu.eval().ravel())\n",
"plt.xlabel('actual')\n",
"plt.ylabel('inferred')"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 3.33127856, 3.24298263, 2.90826464, ..., 3.9010663 ,\n",
" 3.92955494, 3.53663588], dtype=float32)"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lam_mu.value().eval()"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 3.33127856, 3.24298263, 2.90826464, ..., 3.9010663 ,\n",
" 3.92955494, 3.53663588], dtype=float32)"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q_lam.mean().eval()"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([-2.72199321], dtype=float32)"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q_sig.mean().eval()"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(array([ 2.78020024], dtype=float32), 3.2188758248682006)"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q_muA.mean().eval(), np.log(25)"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([-0.24020737, 0.08001974, 0.47328213], dtype=float32)"
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q_muB.mean().eval()"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([-0.27179265, 0.19465165, 0.39175063], dtype=float32)"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q_B.mean().eval().mean(0)"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(array([-7.], dtype=float32), array([ 0.06574358], dtype=float32))"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sig.mean().eval(), np.exp(q_sig.mean().eval())"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [Root]",
"language": "python",
"name": "Python [Root]"
},
"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.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment