Hamming tarmog'i


Download 115 Kb.
Sana27.01.2023
Hajmi115 Kb.
#1133914
Bog'liq
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?

Yuqorida keltirilgan rasmda biz Hamming tarmog'ini ko'rishimiz mumkin. Uni ikkita asosiy bo'limga bo'lish mumkin:
kirish qatlami - neyronlar bilan qurilgan qatlam, bu neyronlarning barchasi barcha tarmoq kirishlariga ulangan;chiqish qatlami - bu MaxNet qatlami deb ataladi; bu qatlamning har bir neyronining chiqishi ushbu qatlamning har bir neyronining kirishiga ulanadi, bundan tashqari bu qatlamning har bir neyroni kirish qatlamining aynan bitta neyroniga ulanadi (yuqoridagi rasmda bo'lgani kabi).

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.


qayerda:

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:



Tarmoq javobini barqarorlashtirish uchun chiqish qatlamidagi 15 ta hisoblash tsikli etarli bo'ladi, deb taxmin qildik; lekin biz kuchli shovqin bilan shug'ullanganimizda, bu etarli bo'lmasligi mumkinligini payqadik. Har bir tsiklda chiqishlardan birida “1” bor yoki yoʻqligini tekshirish eng yaxshi yechim boʻlardi, lekin tasnifni amalga oshirish uchun qancha vaqt kerakligini taxmin qilish qiyin boʻladi – bu bilan ishlashda bu juda muhim. DSP.

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'

# Else append the data

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)


# Convert binary to decimal

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)

# Data to be transferred

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'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling