디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

파이썬 문제 이거 어떻게푸나요??

dd(210.110) 2021.05.17 19:10:02
조회 153 추천 0 댓글 3
														

# -*- coding: utf-8 -*-


import random

import numpy as np

import tensorflow as tf


random.seed(777)


# 환경 변수 지정


# 입력값 및 타겟값

data = [

    [[0, 0], [0]],

    [[0, 1], [1]],

    [[1, 0], [1]],

    [[1, 1], [0]]

]


# 실행 횟수(iterations), 학습률(lr), 모멘텀 계수(mo) 설정

iterations=100000

lr=0.1

mo=0.9


# 활성화 함수 - 1. 시그모이드

# 미분할 때와 아닐 때의 각각의 값

def sigmoid(x, derivative=False):

    if (derivative == True):

        return x * (1 - x)

    return 1 / (1 + np.exp(-x))


# 활성화 함수 - 2. tanh

# tanh 함수의 미분은 1 - (활성화 함수 출력의 제곱)

def tanh(x, derivative=False):

    if (derivative == True):

        return 1 - x ** 2

    return np.tanh(x)


# 가중치 배열 만드는 함수

def makeMatrix(i, j, fill=0.0):

    mat = []

    for i in range(i):

        mat.append([fill] * j)

    return mat


# 신경망의 실행

class NeuralNetwork:


    # 초깃값의 지정

    def __init__(self, num_x, num_yh, num_yo, bias=1):


        # 입력값(num_x), 은닉층 초깃값(num_yh), 출력층 초깃값(num_yo), 바이어스

        self.num_x = num_x + bias  # 바이어스는 1로 지정(본문 참조)

        self.num_yh = num_yh

        self.num_yo = num_yo


        # 활성화 함수 초깃값

        self.activation_input = [1.0] * self.num_x

        self.activation_hidden = [1.0] * self.num_yh

        self.activation_out = [1.0] * self.num_yo


        # 가중치 입력 초깃값

        self.weight_in = makeMatrix(self.num_x, self.num_yh)

        for i in range(self.num_x):

            for j in range(self.num_yh):

                self.weight_in[i][j] = random.random()


        # 가중치 출력 초깃값

        self.weight_out = makeMatrix(self.num_yh, self.num_yo)

        for j in range(self.num_yh):

            for k in range(self.num_yo):

                self.weight_out[j][k] = random.random()


        # 모멘텀 SGD를 위한 이전 가중치 초깃값

        self.gradient_in = makeMatrix(self.num_x, self.num_yh)

        self.gradient_out = makeMatrix(self.num_yh, self.num_yo)


    # 업데이트 함수

    def update(self, inputs):


        # 입력 레이어의 활성화 함수

        for i in range(self.num_x - 1):

            self.activation_input[i] = inputs[i]


        # 은닉층의 활성화 함수

        for j in range(self.num_yh):

            sum = 0.0

            for i in range(self.num_x):

                sum = sum + self.activation_input[i] * self.weight_in[i][j]

            # 시그모이드와 tanh 중에서 활성화 함수 선택

            self.activation_hidden[j] = sigmoid(sum, False)


        # 출력층의 활성화 함수

        for k in range(self.num_yo):

            sum = 0.0

            for j in range(self.num_yh):

                sum = sum + self.activation_hidden[j] * self.weight_out[j][k]

            # 시그모이드와 tanh 중에서 활성화 함수 선택

            self.activation_out[k] = sigmoid(sum, False)


        return self.activation_out[:]

    

    # 역전파의 실행

    def backPropagate(self, targets):


        # 델타 출력 계산

        output_deltas = [0.0] * self.num_yo

        for k in range(self.num_yo):

            error = targets[k] - self.activation_out[k]

            # 시그모이드와 tanh 중에서 활성화 함수 선택, 미분 적용

            output_deltas[k] = sigmoid(self.activation_out[k], True) * error


        # 은닉 노드의 오차 함수

        hidden_deltas = [0.0] * self.num_yh

        for j in range(self.num_yh):

            error = 0.0

            for k in range(self.num_yo):

                error = error + output_deltas[k] * self.weight_out[j][k]

                # 시그모이드와 tanh 중에서 활성화 함수 선택, 미분 적용

            hidden_deltas[j] = sigmoid(self.activation_hidden[j], True) * error


        # 출력 가중치 업데이트

        for j in range(self.num_yh):

            for k in range(self.num_yo):

                gradient = output_deltas[k] * self.activation_hidden[j]

                v = mo * self.gradient_in[j][k] - lr * gradient

                self.weight_in[j][k] += v

                self.gradient_out[j][k] = gradient


        # 입력 가중치 업데이트

        for i in range(self.num_x):

            for j in range(self.num_yh):

                gradient = hidden_deltas[j] * self.activation_input[i]

                v = mo*self.gradient_in[i][j] - lr * gradient

                self.weight_in[i][j] += v

                self.gradient_in[i][j] = gradient


        # 오차의 계산(최소 제곱법)

        error = 0.0

        for k in range(len(targets)):

            error = error + 0.5 * (targets[k] - self.activation_out[k]) ** 2

        return error


    # 학습 실행

    def train(self, patterns):

        for i in range(iterations):

            error = 0.0

            for p in patterns:

                inputs = p[0]

                targets = p[1]

                self.update(inputs)

                error = error + self.backPropagate(targets)

            if i % 500 == 0:

                print('error: %-.5f' % error)

    # 결괏값 출력

    def result(self, patterns):

        for p in patterns:

            print('Input: %s, Predict: %s' % (p[0], self.update(p[0])))


if __name__ == '__main__':


    # 두 개의 입력 값, 두 개의 레이어, 하나의 출력 값을 갖도록 설정

    n = NeuralNetwork(2, [3,1,2,3], 1)


    # 학습 실행

    n.train(data)


    # 결괏값 출력

    n.result(data)



# Reference: http://arctrix.com/nas/python/bpnn.py (Neil Schemenauer)




viewimage.php?id=3dafdf21f7d335ab67b1d1&no=24b0d769e1d32ca73dec8efa11d02831b210072811d995369f4ff09c9cd64d80a0a4c4776335ff5717b70c448772e726dd3afd47c37ad6a97ae54209aaf487dfa1b688bf4973


이거 풀어줄분;; 문제 한개만이라도;; 감도 안잡힙니다 ..ㅠㅠ


추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 연예인 안됐으면 어쩔 뻔, 누가 봐도 천상 연예인은? 운영자 24/06/17 - -
1743097 새내기 선택정렬 관련 도움 필요!! [7] ㅇㅇㅇ(119.70) 21.05.30 70 0
1743096 본인 05년생인데 나이든게 느껴진다.. [10] ㅇㅇ(106.102) 21.05.30 113 1
1743095 머리 극한으로 굴리면 [3] ㅇㅇ(39.7) 21.05.30 54 0
1743093 무궁화 꽃이... [2] ㅇㅇ갤로그로 이동합니다. 21.05.30 37 0
1743092 2020 한국가족, 20대 틀을 깬다…'비혼독신·무자녀 찬성' 50% [1] ㅇㅇ(202.150) 21.05.30 58 0
1743091 친구한테 소중한시간내 10분통화뒤 끊으려하면 [3] ㅇㅇ(210.219) 21.05.30 61 0
1743090 할까말까 고민될 땐 해야한다 ㅇㅇ(110.70) 21.05.30 43 0
1743088 개발자는 한숨을 가장 많이쉬는 직업임 [6] ㅇㅇ(118.235) 21.05.30 106 0
1743087 인지과학조져라 [4] 손발이시립니다갤로그로 이동합니다. 21.05.30 33 0
1743086 머리 쓸 때 뇌주름이 지렁이가되서 [1] ㅇㅇ(110.70) 21.05.30 51 0
1743085 디버깅 쾌감은 성적 쾌감에 버금가지 [2] ㅇㅇ(110.70) 21.05.30 48 0
1743084 울어라... 지옥참마도!!! ㅇㅇ(223.39) 21.05.30 31 0
1743082 개발자되서 좋았다고 느낀게 뇌를 많이 쓰는것같아서 좋음 [5] ㅇㅇ(1.243) 21.05.30 112 3
1743081 공부엔 동기부여가 필수적인거 같음 ㅇㅇ(210.219) 21.05.30 41 0
1743080 확실히 윈도우서버가 빠르긴 빠른듯 [2] ㅇㅇ(118.235) 21.05.30 75 0
1743079 개발자가 그래도 치매는 걸릴 확률이 낮잖아 [1] ㅇㅇ(110.70) 21.05.30 73 0
1743078 회사 잘못들어가서 고인물 된 사람 많더라 [2] ㅇㅇ(210.219) 21.05.30 85 0
1743077 파이썬 질문 좀요 [4] ㅇㅇ(116.121) 21.05.30 404 0
1743076 자료구조 하지마라 [1] ㅇㅇ(1.219) 21.05.30 59 0
1743074 여태 뭐하고 ㅇㅇ(1.219) 21.05.30 30 0
1743073 개발자들 개고생하며 일해서 얻는게 뭐임? [2] ㅇㅇ(210.219) 21.05.30 61 0
1743070 인지과학조져라 손발이시립니다갤로그로 이동합니다. 21.05.30 24 0
1743069 전자공학도 찐따 많냐? [1] ㅇㅇ(175.127) 21.05.30 76 0
1743068 오늘을 이대로 보내버린다면 ㅇㅇ(211.36) 21.05.30 30 0
1743067 이 직업이 유독 찐따만들기 딱 좋은직업이지 [2] ㅇㅇ(61.101) 21.05.30 80 0
1743066 자본주의시대라서 게임의 룰이 바뀐 거 같다 [1] ㅇㅇ(175.198) 21.05.30 50 0
1743065 스님이 지금이 제일좋은거래 [1] 피치피(202.150) 21.05.30 44 0
1743064 풀스택땔감인데... 회사에서 노트북사준다는데 이거 어떰??? [7] ㅇㅇ(1.243) 21.05.30 221 0
1743063 예전에 컴공이 여자꼬시는법으로 [1] 심심한잉여갤로그로 이동합니다. 21.05.30 113 0
1743062 내가 시발 10대로 돌아가면 걍 고졸로살꺼임 [5] ㅇㅇ(211.194) 21.05.30 171 0
1743061 '그때 할걸...' 자주 생각하는 애들 특징.TXT [2] ㅇㅇ(61.101) 21.05.30 87 0
1743060 우리집에 야수가 살아 보고갈래? ㅇㅇ(110.70) 21.05.30 30 0
1743059 깃허브에 커밋하는거 어떤 코드던 상관없음? [4] ㅇㅇ(58.120) 21.05.30 92 0
1743058 여기는 머릿속에 마구니가 가득해 ㅇㅇ(118.235) 21.05.30 22 0
1743056 여자가 너무 쉬워서 연애가 재미없음 ㅇㅅㅇ.. [5] ㅇㅇ(106.102) 21.05.30 76 0
1743055 나이가지고 취업어쩌고 거리는새끼들 패고싶네 [2] ㅇㅇ(211.194) 21.05.30 95 0
1743054 개발자 vs 작가 [4] ㅇㅇ(110.70) 21.05.30 52 0
1743053 동물키우면 연애에 가산점있음 [5] 심심한잉여갤로그로 이동합니다. 21.05.30 46 0
1743052 난 유럽가서 살고싶어 [3] ㅇㅇ(222.103) 21.05.30 39 0
1743050 진짜 취직해서 최대한 빠르게 시드머니 만들고 나와야함 [1] ㅇㅇ(110.70) 21.05.30 53 0
1743049 중간은 성격 ㅇㅇ(118.235) 21.05.30 23 0
1743048 닭강정이나 먹을까 쩝 ㅇㅇ(180.71) 21.05.30 31 0
1743047 연애의 시작은 얼굴이요 [4] ㅇㅇ(110.70) 21.05.30 52 0
1743046 여드름갤 보셈 심각함 [1] ㅇㅇ(118.235) 21.05.30 60 0
1743045 이정도 디자인감각이면 웹퍼블리셔나 프론트엔드 취직해도 될까? [6] ㅇㅇ(210.92) 21.05.30 487 0
1743044 연애는 자신감이야 심심한잉여갤로그로 이동합니다. 21.05.30 68 0
1743043 근데 취직해서 중상층으로 살기는 개불가능하다 [2] ㅇㅇ(110.70) 21.05.30 51 0
1743042 현실적인 고졸 27살 취업가능할까? [7] ㅇㅇ(175.223) 21.05.30 196 0
1743041 프갤 호감닉 투표받음 [6] ㅇㅇ(112.187) 21.05.30 83 0
1743040 나때는 누가 안알려줘도 인터넷 책 뒤져가며 눈치로 익히며 다 배웠는데 [5] ㅇㅇ(210.219) 21.05.30 68 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2