Hamming tarmog'i
Download 115 Kb.
|
zarifa sun\'iy
Hamming tarmog'i Ko'pgina neyron tarmoqlarda nazoratsiz o'rganishdan foydalangan holda masofani hisoblash va taqqoslash juda muhimdir. Ushbu turdagi tarmoq Hamming tarmog'i bo'lib, unda har bir kirish vektori uchun u turli guruhlarga to'planadi. Quyida Hamming Networks-ning muhim xususiyatlari keltirilgan Lippmann 1987 yilda Hamming tarmoqlarida ishlay boshlagan. Bu bitta qatlamli tarmoq. Kirishlar ikkilik {0, 1} bipolyar {-1, 1} boʻlishi mumkin. To'rning og'irliklari namunaviy vektorlar bo'yicha hisoblanadi. Bu qattiq vazn tarmog'i bo'lib, og'irliklar mashg'ulot paytida ham bir xil bo'lib qoladi.
Xemming klassifikatori tavsifi Ushbu loyiha signallar tasniflagichi sifatida ishlaydigan Hamming neyron tarmog'ining xususiyatlarini, ilovalarini va yaratish jarayonini tavsiflaydi. Ushbu loyihada tasvirlangan tarmoq modeli professional adabiyotda tasvirlanganidan biroz farq qilishi mumkinligini sezishingiz mumkin. Buning sababi, biz o'z tarmog'imizni Matlab muhitida amalga oshirish uchun yaratdik. Shunga qaramay, tarmoq to'g'ri ishlaydi. Hamming Network qanday signallarni qayta ishlaydi? Tarmoq analog usulda ishlayotgan bo'lsa-da, u ikkilik signallarni qayta ishlaydi - boshqa tomondan, bu signallar "shovqinli" bo'lishi mumkin va faqat nol va birliklar emas, balki doimiy qiymatlarga ega bo'lishi mumkin. Hamming tarmog'i nimaga o'xshaydi?
Ikkala qatlamda ham bir xil miqdordagi neyronlar mavjudligini ko'rish oson. Hamming Network qanday ishlaydi? Kirish qatlami neyronlari aniq sonli naqshlarni aniqlash uchun dasturlashtirilgan; bu qatlamdagi neyronlar soni ushbu naqshlar soniga mos keladi (M neyronlar - M naqshlar). Ushbu neyronlarning chiqishlari kirish signalining berilgan naqshga o'xshashligini "o'lchaydigan" funktsiyani amalga oshiradi. Chiqish qatlami sinov signaliga eng o'xshash naqshni tanlash uchun javobgardir. Ushbu qatlamda eng kuchli javob beradigan neyron boshqa neyronlarning javoblarini to'xtatadi (odatda bu bir necha hisoblash sikllaridan keyin sodir bo'ladi va bu tsikllar davomida x(i) kirishlarida "0" bo'lishi kerak). Chiqishda tarmoqning javobiga ishora qiluvchi 1 dan M kodi bo'lishi kerak (1 ta M naqsh tan olinadi). Bunga erishish uchun to'g'ri uzatish funktsiyasidan foydalanish kerak - bizning holatlarimizda eng yaxshi funksiya edi Bog'lanish og'irliklari qanday yaratiladi? Kirish qatlami neyronlarining og'irligi Ushbu og'irliklar barcha neyronlarning maksimal javoblari teng bo'lishini ta'minlash uchun o'rnatiladi va aynan bitta naqsh o'ziga xos neyronning javob berishiga sabab bo'ladi. Bunga erishish uchun tarmoqni o'rgatishning hojati yo'q, og'irliklarni matematik tarzda belgilash kifoya.
w (i, j) - "j" neyroni va "i" kirish o'rtasidagi aloqaning og'irligix(i,j) j naqshidagi i signalining qiymati Neyronning og'irliklari va impulslarining mahsulotini og'irlik vektori va impuls vektori orasidagi burchakning kosinusi sifatida talqin qilish mumkinligini eslaganimizda, bu tenglama aniq bo'ladi. Ushbu vektorlar teng bo'lganda, neyron chiqishi "1" bo'ladi, vektorlar boshqacha bo'lsa, chiqish qiymati diapazoni -1 dan 1 gacha bo'ladi. Chiqish qatlami neyronlarining kirish og'irliklari Dastlab, biz chiqish qatlami neyronlari kirish sonini aniqlashimiz kerak. Ushbu neyronlarning har biri bir-biriga bog'langan: o'ziga - vazn = 1chiqish qatlamining barcha neyronlariga - har bir ulanishning og'irligi -1 / Mkirish qatlamining tegishli neyroniga - vazn = 1 Misol
Hamming klassifikatori bilan tanishish uchun biz Matlab muhitida tarmoq yaratdik. Uning vazifasi tarmoq "xotirasida" qayd etilgan 8 ta belgidan 1 tasini tanib olishdir. Quyidagi rasmda 8 ta ishlatilgan belgilar ko'rsatilgan: Ushbu belgilarni ifodalovchi matritsalar ikki o'lchovli (3x5 piksel), lekin ularni bir qatorli (15 pozitsiya) vektor sifatida yozish qulayroq edi. Qora kvadratlar bir, oq kvadratlar esa nolga teng. To'g'ri hisob-kitoblarni amalga oshirish uchun biz barcha qator vektorlarini normallashtirdik. Biz 8 ta belgini tasniflashni xohlaymiz, shuning uchun bizning tarmog'imiz 2 guruhga bo'lingan 16 ta neyronni, har bir qatlamda 8 ta neyronni o'z ichiga oladi. Kirish qatlamining og'irligi oldindan normallashtirilgan belgilarning transpozitsiyalangan matritsasi sifatida belgilangan. Chiqish qatlamining og'irligi ilgari aytilgan taxminlarga muvofiq aniqlanadi ( "Chiqish qatlami neyronlarining kirish og'irliklari" bo'limiga qarang) va bizning holatlarimizda "1/M" parametri "1/8" ga o'rnatildi. Ushbu matritsaning qatorlarini normallashtirish kerakligini unutolmaymiz. Biz tanlagan neyron faollashtirish funksiyasi:
Tajribaning oxirgi qismi bizning belgilarimizga biroz shovqin qo'shish va keyin tarmoqni tekshirish edi. “Analog” shovqin rand() funksiyasi bilan hosil qilinadi. Pythonda Hamming kodini amalga oshirish Hamming kodi - bu ma'lumotlarni jo'natuvchidan qabul qiluvchiga ko'chirish yoki saqlash paytida yuzaga kelishi mumkin bo'lgan xatolarni aniqlash va tuzatish uchun ishlatilishi mumkin bo'lgan xatolarni tuzatish kodlari to'plami. Bu xatolarni tuzatish uchun RW Hamming tomonidan ishlab chiqilgan texnikadir. Eslatma: Hamming kodini yaxshi bilish tavsiya etiladi, chunki u old shart bo'lib xizmat qiladi. Qadamlar: Uzatiladigan ma'lumotlarni kiritingKerakli ortiqcha bitlar sonini hisoblangParite bitlarini aniqlangSinov uchun xato ma'lumotlarini yaratingXatolarni tekshiring Misollar: Kiritish: 1011001 Chiqish: O'tkazilgan ma'lumotlar 10101001110 Xato ma'lumotlari - 11101001110 Xatoning pozitsiyasi 10Kiritish: 10101111010 Chiqish: O'tkazilgan ma'lumotlar 101011111010000 Xato ma'lumotlari - 101011111010100 Xatoning pozitsiyasi 3 Misol
Python 3 # Python program to demonstrate # hamming code def calcRedundantBits(m): # Use the formula 2 ^ r >= m + r + 1 # to calculate the no of redundant bits. # Iterate over 0 .. m and return the value # that satisfies the equation
for i in range(m): if(2**i >= m + i + 1): return i def posRedundantBits(data, r): # Redundancy bits are placed at the positions # which correspond to the power of 2. j = 0
k = 1 m = len(data) res = ''
# If position is power of 2 then insert '0' for i in range(1, m + r+1): if(i == 2**j): res = res + '0' j += 1 else:
res = res + data[-1 * k] k += 1
# The result is reversed since positions are # counted backwards. (m + r+1 ... 1) return res[::-1] def calcParityBits(arr, r): n = len(arr)
# For finding rth parity bit, iterate over # 0 to r - 1 for i in range(r): val = 0 for j in range(1, n + 1): # If position has 1 in ith significant # position then Bitwise OR the array value # to find parity bit value. if(j & (2**i) == (2**i)): val = val ^ int(arr[-1 * j]) # -1 * j is given since array is reversed
# String Concatenation # (0 to n - 2^r) + parity bit + (n - 2^r + 1 to n) arr = arr[:n-(2**i)] + str(val) + arr[n-(2**i)+1:] return arr def detectError(arr, nr): n = len(arr) res = 0
# Calculate parity bits again for i in range(nr): val = 0 for j in range(1, n + 1): if(j & (2**i) == (2**i)): val = val ^ int(arr[-1 * j]) # Create a binary no by appending # parity bits together.
res = res + val*(10**i) return int(str(res), 2)
# Enter the data to be transmitted data = '1011001'
# Calculate the no of Redundant Bits Required m = len(data) r = calcRedundantBits(m) # Determine the positions of Redundant Bits arr = posRedundantBits(data, r)
# Determine the parity bits arr = calcParityBits(arr, r)
print("Data transferred is " + arr)
# Stimulate error in transmission by changing # a bit value. # 10101001110 -> 11101001110, error in 10th position. arr = '11101001110' print("Error Data is " + arr) correction = detectError(arr, r) if(correction==0): print("There is no error in the received message.") else: print("The position of error is ",len(arr)-correction+1,"from the left") Chiqish O'tkazilgan ma'lumotlar 10101001110 Xato ma'lumotlari - 11101001110 Xatoning pozitsiyasi chapdan 2 Xulosa Biz yaratgan tarmoq to'g'ri ishlaydi - agar iloji bo'lsa, u shovqin bilan ham berilgan belgini taniydi. Buni amalga oshirishning mutlaqo imkoni bo'lmaganida yoki ikkita neyron bir-biriga o'xshash kuchli javoblarga ega bo'lganda, uni to'g'ri tan olmaydi - buni tanib olish uchun ko'proq hisoblash tsikllari kerak bo'ladi. Download 115 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling