일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Python
- 히토요시
- 베이지안
- backpropagation
- 전처리
- mnist
- Autoencoder
- A Neural Algorithm of Artistic Style
- 자전거 여행
- 딥러닝
- project euler
- 비샤몬당
- 오토인코더
- 역전파법
- 합성곱 신경망
- Convolutional Neural Network
- neural network
- bayesian
- 역전파
- 신경망
- 오일러 프로젝트
- c#
- 수달
- 소인수분해
- 냥코 센세
- Gram matrix
- 소수
- SQL
- deep learning
- CNN
- Today
- Total
목록Python (54)
통계, IT, AI
1. 개요문제는 이곳에서 확인할 수 있다. 1, 2, 5, 10, 20, 50, 100 그리고 200을 사용하여 200을 만드는 방법의 수를 구하는 것이 목표이다. 이 문제는 재귀함수를 사용하여 간단하게 해결할 수 있다. 즉, 200에서 100을 빼고 나면, 문제는 100을 만드는 방법의 수를 구하는 것으로 변한다. 2. 구현: ver 1.0재귀함수를 이용하여 구현한다. 하지만 이 방법은 그다지 효율적이진 않은데, 만약 200이 아니라 400을 구하라고 해도 생각보다 시간이 오래 걸린다. 사람들의 아이디어를 참고하여 memoization을 사용하려고 했지만 아둔하기 짝이 없어 결국 이해하지 못했다. # -*- coding: utf-8 -*- import numpy as np coins = [200, 10..
1. 개요- 입력이 4개이며 출력은 3가지 클래스를 갖는 경우를 생각해보자. 신경망은 그림 1과 같다.- 입력과 파라미터를 아래와 같이 정의한다.$$\begin{eqnarray} x_n&=& \begin{bmatrix}x_{n1} & x_{n2} & x_{n3}& x_{n4} \end{bmatrix}, \quad w=\begin{bmatrix}w_{11} & w_{21} & w_{31} \\ w_{12} & w_{22} & w_{32} \\ w_{13} & w_{23} & w_{33} \\ w_{14} & w_{24} & w_{34} \end{bmatrix}, \quad b=\begin{bmatrix}b_{1} & b_{2} & b_{3} \end{bmatrix} \\ \\ u&=&\begin{bmatr..
1. 개요- 변수가 2개이며 종속변수가 이진형인 경우를 생각해보자. 신경망은 그림 1과 같다.- 훈련데이터의 수는 200으로 한다. - 출력이 이진형이므로 활성함수는 sigmoid로 한다. - 즉, \(u_1=w_{11}x_1+w_{12}x_2+b_1\)이며 \(z_1=f(u_1)=1/(1+exp(-u_1))\)이다. - \(x_1\)과 \(x_2\)는 \(U(-1,1)\)에서 각각 독립적으로 생성한다.- 출력 \(d\)는 아래와 같이 정의한다. 단, \(\varepsilon\)은 \(N(0, 0.3^2)\)를 따른다.\begin{eqnarray}d = \begin{cases} 1 & \text{if } x_2 > x_1 + 1 + \varepsilon \\ 0 & \text{otherwise} \end..
1. 개요문제는 이곳에서 확인할 수 있다. \(1634\)는 각 자리수의 4승의 합과 같다. 즉, \(1634=1^4+6^4+3^4+4^4\)이다. 이와 같이, 각 자리수의 5승의 합과 같은 모든 숫자의 합을 구하는 것이 목표이다. 단, 1은 합이 아니므로 제외한다.2. 구현: ver 1.0무한히 많은 숫자에 대해서 이를 테스트할 수는 없으므로 상한선을 찾아야 한다. \(n\)자리의 수 \(d\)가 있다고 하자. \(d\)의 최소값은 \(10^{n-1}\)이며, 최대값은 \(10^n-1\)이다. 그리고 \(d\)의 각 자리수의 5승의 합의 최대값은 \(9^5n\)이다. 따라서 \(10^{n-1}>9^5n\)를 만족하는 \(n\)부터는 확인할 필요가 없다. 사실 \(9^5\times 7=59049 \tim..
1. 개요- 다음 파트로 넘어가기 전에 지금까지 배운 것을 구현하여 이해를 확실하게 하자. - 가장 간단한 경우부터 연습하기 위하여 변수가 1개인 회귀 문제를 선택한다. 즉, 신경망은 다음과 같다. - 출력층의 활성함수는 항등함수로 한다. 그러므로 \(u_1=w_{11}x_1+b_1\)이며 \(z_1=f(u_1)=u_1\)이다. - 연습에 사용할 \(x_1\)은 \(U(-4,4)\)에서 200개를 생성한다. - 출력 \(d\)는 \(x_1-1+\varepsilon\)이며 \(\varepsilon\)은 \(N(0,1)\)를 따른다. - 데이터의 형태는 그림 2와 같다. 붉은 선은 연습에서 추정해야 할 파라미터를 나타낸다.- minibatch를 사용하며 1개의 batch size는 20으로 하며 반복횟수(e..
1. 개요 문제는 이곳에서 확인할 수 있다. 정수 \(a\in[2,100], b\in[2,100]\)에 대하여 \(a^b\)의 개수를 세는 것이 목표이다. 단, 중복은 제외한다. 2. 구현: ver 1.0loop를 이용하여 구현하되 overflow를 방지하기 위하여 Decimal 내장 모듈을 사용한다. # -*- coding: utf-8 -*- import decimal as d term_list = [] for a in range(2, 101): for b in range(2,101): term_list.append(d.Decimal(a) ** d.Decimal(b)) print(len(set(term_list))) 답은 9183이다.
1. 개요문제는 이곳에서 확인할 수 있다. 1부터 시계 방향으로 늘어놓은 뒤 대각선에 있는 숫자들의 합을 구할 수 있다. 아래의 예는 5행 5열의 숫자더미이며 대각선의 숫자의 합은 101이다. 1001행 1001열의 숫자더미에서 대각선의 숫자의 합을 구하는 것이 목표이다. 2. 구현: ver 1.0일반항을 구하여 문제를 해결하자. 1부터 시작하여 오른쪽에 존재하는 숫자들의 개수를 층이라고 정의하자. 예를 들면, 그림 1은 3층이다. 그러면 오른쪽 대각선의 있는 숫자는 층수 번째 홀수의 제곱임을 알 수 있고 이를 이용하여 일반항을 구할 수 있다. # -*- coding: utf-8 -*- n = 500 print(n*(8*(n+1)*(2*n+1)//3+2*n+6)+1) 답음 669171001이다.
1. 개요문제는 이곳에서 확인할 수 있다. 어떤 정수 \(a\), \(b\)가 주어졌을 때, Quadratic form \(n^2+an+b\)는 \(n=0\)부터 시작하여 소수를 연속적으로 생성한다. 예를 들어 \(n^2+n+41\)은 40개의 소수를, \(n^2-79n+1601\)은 80개의 소수를 생성한다. 소수를 연속적으로 가장 많이 생성하는 \(a\)와 \(b\)를 찾고 그 곱을 구하는 것이 목표이다. 단, \(a\), \(b\)를 \(\left| a\right| lim: break self.prime_list.extend(prime_candidate_list) def quadratic_formula(n, a, b): """소수를 생성하는 식""" return n**2 + a*n + b p = P..
1. 개요문제는 이곳에서 확인할 수 있다. 1보다 크고 1000보다 작은 어떤 자연수 \(d\)로 순환소수 \(1/d\)를 만들 수 있다. 예를 들어 \(1/6=0.1(6)\)이며 \(1/7=0.(142857)\)이다. 순환되는 부분이 가장 긴 \(d\)를 찾는 것이 목표이다. 2. 구현: ver 1.0나눗셈을 수행하면서 순환되는 부분이 어디에서 발생하는지 확인한다. # -*- coding: utf-8 -*- def count_reciprocal_cycles(d): """나눗셈을 수행하면서 나머지가 0이면 순환되는 부분이 없으므로 0을 반환한다. 나머지가 이미 발생한 나머지라면 순환이 시작되는 부분이므로 이 부분을 찾는다.""" quotient_list, remainder_list = [], [] n =..
1. 개요문제는 이곳에서 확인할 수 있다. \(n\)번째 피보나치 수열의 값을 \(F_n\)이라고 할 때 최초로 1000의 자리를 넘는 \(F_n\)의 \(n\)을 구하는 것이 목표이다. 단, \(F_1=F_2=1\)이다. 2. 구현: ver 1.0처음에는 피보나치 수열의 일반항을 구하여 진행하려고 했으나 일반항에 무리수가 포함되어 있고 거듭제곱 연산이 발생하기 때문에 계산상 오차가 발생하였다. 피보나치 수열의 일반항은 3. 피보나치 수열의 일반항에 적고, 본 문제의 해결은 피보나치 수열의 정의를 이용한다. # -*- coding: utf-8 -*- import math as m fn_2, fn_1 = 1, 1 fn = fn_2 + fn_1 n = 3 while m.log(fn, 10) < 999: # ..