AI-Deep Learning 1日目

45030 ワード

学習内容

  • は、最も基本的なリーグ(最初の関数)
  • を表示します.
    import math # 기본적인 수식을 쓰기 위해 임포트
    import numpy as np
    import matplotlib.pyplot as plt\
    plt.style.use('seaborn-whitegrid') #그리드가 있는 표 그리기
    
    # 함수 생성 (파라미터 1개인 함수 생성)
    def linear_funtion(x):
        #a는 기울기와 상수로 생성
        a = 0.5
        b = 2
        # 일차함수 수식 반환
        return a * x + b 
           
    # 테스트
    print(linear_funtion(5))
    
    결과)
    4.5
  • 次関数図
  • を描画する
    x = np.arange(-5, 5, 0.1)
    y = linear_funtion(x) #배열을 넣으면 결과인 배열이 y에 담김
    
    #그래프로 그리기
    plt.plot(x, y)
    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('Linear Funtion')
    # 선형회귀를 만들었음
  • 二次関数
  • def quadratic_funtion(x):
        a = 1 #기울기
        b = -2 #절편
        c = -2
        
        #x**2은 2제곱
        return a*x**2 + b*x + c
  • 二次関数図
  • を描く
    y = quadratic_funtion(x)
    
    plt.plot(x, y)
    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('Quadratic Funtion')
  • 三次関数
  • def cubic_funtion(x):
        a = 4 #기울기
        b = 0
        c = 1
        d = -8
        
        return a*x**3 + b*x**2 + c*x + d
  • 三次関数図
  • を描く
    y = cubic_funtion(x)
    
    plt.plot(x,y)
    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('Cubic Funtion')

    Tensor


    深い学習の中で、すべての情報はTenserと呼ばれています.
    TenserがあればScara
    複数のテンソルが接して方向性を生じ、ベクトルと呼ばれる
    2つの方向、2 Dベクトルがあれば、
    Tenserの貼るもっと多い方向の上で3つあるならば3 Dベクトルです
    4 D以上のベクトルもあります
    この天書を表すときはnumpyを使います.
  • スカラ(0次元テンソル)
    -数値を含むTenser
    -イメージがない

    Tensor実習

    # 0차원 텐서, 스칼라
    x = np.array(3) #3이라는 숫자가 들어간 배열이 생성됨
    print(x)
    print(x.shape) #모양확인
    print(np.ndim(x)) #차원 확인
    
    결과)
    3
    ()  <= 방향이나 차원이 없기 때문에 괄호만 나온다
    0
    
    # 1차원 텐서. 벡터
    # 1차원 텐서 2개 생성해서 연산
    a = np.array([1,2,3,4])
    b = np.array([5,6,7,8])
    
    c = a + b #python에서는 배열끼리 연산이 된다
    
    print(c)
    print(c.shape)
    print(np.ndim(c))
    
    결과)
    [ 6  8 10 12]
    (4,)
    1
  • 2 2つの異なる次元のTenser演算
  • m = np.array(10) #숫자 10이 하나 들어있는 배열 생성
    
    # 0차원 텐서 m과 1차원 벡터 a 연산
    d = a * m
    print(d)
    
    결과)
    [10 20 30 40]
    低次元と高次元のテンソルを計算します.
    下位レベルのデータをコピーし、上位レベルの演算を行います.
    Broadcastと申します
    1次元と2次元のテンソルを計算しても、同じように1次元のテンソルをコピーして演算します.
    # 2차원 텐서, 벡터
    a = np.array([[1,2],[3,4]]) 
    #[[1,2],[3,4]] 와 [1,2],[3,4]는 다르다
    #[[1,2],[3,4]]는 파라미터 하나이다
    
    print(a)
    print(a.shape)
    print(a.ndim)
    
    결과)
    [[1 2]
     [3 4]]
    (2, 2)
    2
    # 2차원 텐서 스칼라 연산
    b = np.array([[10,10],[10,10]]) 
    
    print(a * b)
    
    결과)
    [[10 20]
     [30 40]]
  • プリマトリクス
    -改行列行列
  • a = np.array([[1,2,3], [4,5,6]])
    
    a_ = a.T #전치행렬
    
    print(a)
    print(a_)
    
    결과)
    [[1 2 3]
     [4 5 6]]
    [[1 4]
     [2 5]
     [3 6]]

    MNIST手書き画像

    #keras 설치가 안되어 있다면 설치
    !pip install keras
    
    #tensorflow 설치가 안되어 있다면 설치
    !pip install tensorflow
    from keras.datasets import mnist
    
    (X_train, y_train), (X_test, y_test) = mnist.load_data()
    
    print(X_train.shape)
    print(X_train.ndim)
    
    결과)
    (60000, 28, 28)
    3
    #데이터 6만개, 3차원 데이터
  • 画像検査
  • temp_image = X_train[3]
    plt.imshow(temp_image, cmap='gray') #흑백

    ろんりかいろけんさ

    import numpy as np
    import matplotlib.pyplot as plt
    plt.style.use('seaborn-whitegrid')
  • AND GATE:両方が参加している場合にのみ
  • に参加します.
    # AND GATE
    def AND(x1, x2):
        input = np.array([x1,x2]) #입력값
        weights = np.array([0.4,0.4]) #가중치
        bias = -0.6 #편향치
        # 가중치와 편향치에 따라 로직이 바뀐다
        
        value = np.sum(input * weights) + bias
        
        if value <= 0:
            return 0
        else:
            return 1
    print(AND(0,0))
    print(AND(0,1))
    print(AND(1,0))
    print(AND(1,1))
    
    결과)
    0
    0
    0
    1
    # 그래프로 표현
    x1 = np.arange(-2, 2, 0.01)
    x2 = np.arange(-2, 2, 0.01)
    bias = -0.6
    
    y = (-0.4 * x1 - bias) / 0.4
    
    # 수직과 수평의 축을 지정
    plt.axvline(x=0)
    plt.axhline(y=0)
    
    plt.plot(x1, y, 'r--')
    plt.scatter(0,0,color='orange',marker='o',s=150)
    plt.scatter(0,1,color='orange',marker='o',s=150)
    plt.scatter(1,0,color='orange',marker='o',s=150)
    plt.scatter(1,1,color='black',marker='^',s=150)
    plt.xlim(-0.5,1.5)
    plt.ylim(-0.5,1.5)
    plt.grid()
  • OR Gate:
  • #OR Gate Funtion
    def OR(x1, x2):
        input = np.array([x1,x2])
        weights = np.array([0.4,0.4])
        bias = -0.3 #OR는 이 부분만 바꾸면 된다, 나머지는 그대로
        
        value = np.sum(input * weights) + bias
        
        if value <= 0:
            return 0
        else:
            return 1
    # AND와 수식은 같고 bias 값만 다르다
    print(OR(0,0))
    print(OR(0,1))
    print(OR(1,0))
    print(OR(1,1))
    
    결과)
    0
    1
    1
    1
    # OR Gate 그래프로 표현
    x1 = np.arange(-2, 2, 0.01)
    x2 = np.arange(-2, 2, 0.01)
    bias = -0.3 #이 부분만 변경, 가중치를 -0.6에서 -0.3으로 낮춤
    
    y = (-0.4 * x1 - bias) / 0.4
    
    # 수직과 수평의 축을 지정
    plt.axvline(x=0)
    plt.axhline(y=0)
    
    plt.plot(x1, y, 'r--')
    plt.scatter(0,0,color='black',marker='^',s=150) #보기 좋게 변경
    plt.scatter(0,1,color='orange',marker='o',s=150)
    plt.scatter(1,0,color='orange',marker='o',s=150)
    plt.scatter(1,1,color='orange',marker='o',s=150)
    plt.xlim(-0.5,1.5)
    plt.ylim(-0.5,1.5)
    plt.grid()
  • NAND gate:ANDとは反対の
  • #NAND gate
    def NAND(x1, x2):
        input = np.array([x1,x2])
        weights = np.array([-0.6,-0.6]) #이 부분 변경
        bias = 0.7 #이 부분 변경
        
        value = np.sum(input * weights) + bias
        
        if value <= 0:
            return 0
        else:
            return 1
    # AND와 수식은 같고 bias 값만 다르다
    print(NAND(0,0))
    print(NAND(0,1))
    print(NAND(1,0))
    print(NAND(1,1))
    
    결과)
    1
    1
    1
    0
  • 多層パーセロン
  • def XOR(x1, x2):
        s1 = NAND(x1, x2) #들어온 값을 NAND으로 먼저 처리
        s2 = OR(x1, x2) #들어온 값을 OR로 처리
        y = AND(s1, s2) #처리한 값들을 AND로 처리
        
        return y
    #세가지 게이트를 합쳐서 XOR 게이트를 만들어냄
    print(XOR(0,0))
    print(XOR(0,1))
    print(XOR(1,0))
    print(XOR(1,1))
    
    결과)
    0
    1
    1
    0

    学習後期


    今日は昨日よりもっと簡単な内容で、基礎図の描画とニューラルネットワークのようにコードで処理する方法を学び、実習を行いました.
    授業を続けてみると、コンピューターは計算できるが、よりよく操作するには数学を勉強しなければならないことが分かった.週末はebsで数学を勉強します.
    また、授業が退屈にならないように、先生は開発物語からIT関連の面白い話を始めたので、授業ごとに興味を読まずによく授業についていました.教えてくれたチップや勉強方法も役に立ちます.