Example #1
0
# -*- coding: utf-8 -*-
import numpy as np
import dspBox as dsp
Tobser=[]
file=open('Observation_1.txt','r')	
obser1_r =file.read() 
Tobser.append(dsp.str2ndar(obser1_r))
file.close
file=open('Observation_2.txt','r')	
obser2_r =file.read() 
Tobser.append(dsp.str2ndar(obser2_r))
file.close
file=open('Observation_3.txt','r')	
obser3_r =file.read() 
Tobser.append(dsp.str2ndar(obser3_r))
file.close

A1=np.array([[0.2,0.7,0.1],[0.1,0.2,0.7],[0.7,0.1,0.2]])
B1=np.array([[0.5,0.4,0.1],[0.7,0.2,0.1],[0.7,0.1,0.2]])
pi1=np.array([0.7,0.2,0.1])

A2=np.array([[0.7,0.2,0.1],[0.3,0.6,0.1],[0.1,0.2,0.7]])
B2=np.array([[0.1,0.8,0.1],[0.2,0.7,0.1],[0.4,0.5,0.1]])
pi2=np.array([0.1,0.7,0.2])

A3=np.array([[0.2,0.7,0.1],[0.6,0.3,0.1],[0.2,0.7,0.1]])
B3=np.array([[0.1,0.2,0.7],[0.2,0.2,0.6],[0.3,0.1,0.6]])
pi3=np.array([0.2,0.2,0.6])
TA=np.array([A1,A2,A3])
TB=np.array([B1,B2,B3])
Tpi=np.array([pi1,pi2,pi3])
Example #2
0
import numpy as np
from dspBox import str2ndar

a1 = np.array([[0.3, 0.3, 0.4], [0.3, 0.3, 0.4], [0.4, 0.4, 0.2]])
b1 = np.array([[0.4, 0.4, 0.2], [0.3, 0.3, 0.4], [0.3, 0.3, 0.4]])
pi1 = np.array([0.3, 0.3, 0.4])
a ,b, pi = [a1.copy() for _ in range(3)], [b1.copy() for _ in range(3)], \
[pi1.copy() for _ in range(3)]
obs = [str2ndar(l) for l in iter(open('./Obervations.txt', 'r'))]
ans = open('./Observations_Ans.txt', 'w')
model = [open('./model_{:d}.txt'.format(i + 1), 'w') for i in range(3)]
tr = [[] for _ in range(3)]
for index in range(3):
    tr[index] = [str2ndar(l) for l in \
    iter(open('./training/model_{:d}_training.txt'.format(index+1), 'r'))]
for mi in range(3):  # model index
    trsize = len(tr[mi])
    for iteration in range(5):  # iter index
        size = len(tr[mi][0])
        xi, gm = np.zeros((trsize, size, 3, 3)), np.zeros((trsize, size, 3))
        for ti in range(trsize):  # training seq index
            # =====forward algorithm=====
            forwardp = np.zeros((size, 3))
            forwardp[0] = [pi[mi][state] * b[mi][state, tr[mi][ti][0]] \
            for state in range(3)]
            for i in range(1, size):  # time index
                for state in range(3):
                    for from_ in range(3):
                        forwardp[i, state] += forwardp[i-1, from_] * \
                        a[mi][from_, state] * b[mi][state, tr[mi][ti][i]]
            # =====backward algorithm=====
import numpy as np
from dspBox import str2ndar

obs1 = str2ndar(open('obser1.txt', 'r').read())
obs2 = str2ndar(open('obser2.txt', 'r').read())
obs3 = str2ndar(open('obser3.txt', 'r').read())
# obser3.txt要跟其他兩個一樣多加一空行才能正確讀取到最後一個字
a1 = np.array([[0.2, 0.7, 0.1], [0.1, 0.2, 0.7], [0.7, 0.1, 0.2]])
b1 = np.array([[0.5, 0.4, 0.1], [0.7, 0.2, 0.1], [0.7, 0.1, 0.2]])
pi1 = np.array([0.7, 0.2, 0.1])
a2 = np.array([[0.7, 0.2, 0.1], [0.3, 0.6, 0.1], [0.1, 0.2, 0.7]])
b2 = np.array([[0.1, 0.8, 0.1], [0.2, 0.7, 0.1], [0.4, 0.5, 0.1]])
pi2 = np.array([0.1, 0.7, 0.2])
a3 = np.array([[0.2, 0.7, 0.1], [0.6, 0.3, 0.1], [0.2, 0.7, 0.1]])
b3 = np.array([[0.1, 0.2, 0.7], [0.2, 0.2, 0.6], [0.3, 0.1, 0.6]])
pi3 = np.array([0.2, 0.2, 0.6])
obs, a, b, pi = [obs1, obs2, obs3], [a1, a2, a3], [b1, b2, b3], [pi1, pi2, pi3]
# -------------------

for obsi in range(3):  # Index of observation
    print("obser" + str(obsi + 1))
    for mi in range(3):  # Index of model
        # =====forward algorithm=====
        forwardp = np.zeros((50, 3))
        forwardp[0] = [
            pi[mi][state] * b[mi][state, obs[obsi][0]] for state in range(3)
        ]
        for i in range(1, 50):
            for state in range(3):
                for from_ in range(3):
                    forwardp[i, state] += forwardp[i - 1, from_] * a[mi][
Example #4
0
# -*- coding: utf-8 -*-
import numpy as np
import dspBox as dsp
file = open('obser1.txt', 'r')
obser1_r = file.read()
#print(obser1_r)
obser1 = dsp.str2ndar(obser1_r)
file.close
file = open('obser2.txt', 'r')
obser2_r = file.read()
obser2 = dsp.str2ndar(obser2_r)
file.close
file = open('obser3.txt', 'r')
obser3_r = file.read()
obser3 = dsp.str2ndar(obser3_r)
file.close

A1 = np.array([[0.2, 0.7, 0.1], [0.1, 0.2, 0.7], [0.7, 0.1, 0.2]])
B1 = np.array([[0.5, 0.4, 0.1], [0.7, 0.2, 0.1], [0.7, 0.1, 0.2]])
pi1 = np.array([0.7, 0.2, 0.1])

A2 = np.array([[0.7, 0.2, 0.1], [0.3, 0.6, 0.1], [0.1, 0.2, 0.7]])
B2 = np.array([[0.1, 0.8, 0.1], [0.2, 0.7, 0.1], [0.4, 0.5, 0.1]])
pi2 = np.array([0.1, 0.7, 0.2])

A3 = np.array([[0.2, 0.7, 0.1], [0.6, 0.3, 0.1], [0.2, 0.7, 0.1]])
B3 = np.array([[0.1, 0.2, 0.7], [0.2, 0.2, 0.6], [0.3, 0.1, 0.6]])
pi3 = np.array([0.2, 0.2, 0.6])
#print(obser1)
p_f = []
p_b = []
import numpy as np
from dspBox import str2ndar
obs1 = str2ndar(open('observation1.txt', 'r').read())
obs2 = str2ndar(open('observation2.txt', 'r').read())
obs3 = str2ndar(open('observation3.txt', 'r').read())
# 助教附的oberservation3.txt跟上次一樣沒有換行,所以只會讀到49個狀態,如果加了換行可以讀到50個。

a1 = np.array([[0.2, 0.7, 0.1], [0.1, 0.2, 0.7], [0.7, 0.1, 0.2]])
b1 = np.array([[0.5, 0.4, 0.1], [0.7, 0.2, 0.1], [0.7, 0.1, 0.2]])
pi1 = np.array([0.7, 0.2, 0.1])
a2 = np.array([[0.7, 0.2, 0.1], [0.3, 0.6, 0.1], [0.1, 0.2, 0.7]])
b2 = np.array([[0.1, 0.8, 0.1], [0.2, 0.7, 0.1], [0.4, 0.5, 0.1]])
pi2 = np.array([0.1, 0.7, 0.2])
a3 = np.array([[0.2, 0.7, 0.1], [0.6, 0.3, 0.1], [0.2, 0.7, 0.1]])
b3 = np.array([[0.1, 0.2, 0.7], [0.2, 0.2, 0.6], [0.3, 0.1, 0.6]])
pi3 = np.array([0.2, 0.2, 0.6])
obs, a ,b, pi = [obs1, obs2, obs3], [a1, a2, a3], [b1, b2, b3], [pi1, pi2, pi3]
# -------------------
for obsi in range(3): # Index of observation
    size = len(obs[obsi])
    print("\nobser" + str(obsi + 1))
    for mi in range(3): # Index of model
        # =====viterbi algorithm=====
        p = np.zeros((size, 3)) # possibility
        s = np.zeros((size, 3)) # max state
        p[0] = [pi[mi][state] * b[mi][state, obs[obsi][0]] for state in range(3)]
        s[0] = [state for state in range(3)]
        for i in range(1, size):
            for state in range(3):
                evaluate = [p[i-1, from_] * a[mi][from_, state] * b[mi][state, obs[obsi][i]] for from_ in range(3)]
                p[i, state] = np.max(evaluate)