Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
{
"cells": [
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x121ca4278>]"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Fit a model to some data\n",
"# Model is:\n",
"# prediction = M0 * exp(-TE/T2)*(1-exp(-TR/T1))\n",
"# where M0,T1,T2 are unknown parameters and TE/TR are experimental parameters\n",
"\n",
"\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from scipy.optimize import minimize\n",
"\n",
"\n",
"TEs = np.array([10,40,60,80]) # TE values in ms\n",
"TRs = np.array([.5,1,1.5,2]) # TR in seconds\n",
"\n",
"# All combinations of TEs/TRs\n",
"combinations = np.array([(x,y) for x in TEs for y in TRs])\n",
"TEs,TRs = combinations[:,0],combinations[:,1]\n",
"\n",
"# function for our model\n",
"def forward(p):\n",
" M0,T1,T2 = p\n",
" return M0*np.exp(-TEs/T2)*(1-np.exp(-TRs/T1))\n",
"\n",
"# simulate data using model \n",
"true_p = [100,.8,50]\n",
"data = forward(true_p)\n",
"data = data + np.random.randn(data.size)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"# Now for the fitting\n",
"# we need a cost function:\n",
"\n",
"def cf(p):\n",
" pred = forward(p)\n",
" return np.mean((pred-data)**2)/2\n",
" \n",
"# always a good idea to calculate gradient\n",
"def forward_deriv(p):\n",
" M0,T1,T2 = p\n",
" E1,E2 = np.exp(-TEs/T2),np.exp(-TRs/T1)\n",
" \n",
" dfdM0 = E2*(1-E1)\n",
" dfdT1 = M0*E2*(-E1/T1**2)\n",
" dfdT2 = M0*(E2/T2**2)*(1-E1)\n",
" return np.array([dfdM0,dfdT1,dfdT2])\n",
" \n",
"def gradient(p):\n",
" pred = forward(p)\n",
" deriv = forward_deriv(p)\n",
" return np.mean( deriv * (pred-data)[None,:],axis=1)\n",
"\n",
"# get ready to minimize\n",
"p0 = [200,70,1000] # some random guess\n",
"method = 'TNC'\n",
"\n",
"arguments = {'x0':p0,'method':method,'jac':gradient}\n",
"\n",
"result = minimize(cf,**arguments)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x121f34eb8>]"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(data)\n",
"plt.plot(forward(result.x))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"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.6.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}