ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CNN(Convolutional Neural Network) with Keras 봅시다
    카테고리 없음 2020. 2. 8. 06:17

    #CN을 사용하여 #Keras로 #MNIST의 손글씨 인식 예를 풀겠습니다. CNN(convolutional neural network)는 딥-러닝은 1종류로, 중심에 리드를 인식하는데 사용됩니다.CNN은 앞서 오브젝트, 얼굴, 장면을 인식하기 위해 패턴을 찾는데 특히 유용합니다. CNN은 데이터를 통해 직접 학습하고 패턴을 사용하여 끝을 분류하며 특징을 수동으로 추출할 필요가 없습니다.자율주행차, 얼굴인식 어린이 애플리케이션 등 객체인식과 컴퓨터 비전이 필요한 분야에서 CNN을 자주 사용합니다. 응용 분야에 따라서는 CNN을 처음으로 만들 수도 있고, 데이터 세트에서 사전 학습된 모델을 사용할 수도 있습니다.CNN은 선구인식과 패턴감지를 위한 최적의 아키텍처를 제공합니다. CNN은 발전을 거듭한 GPU와 병렬 컴퓨팅처럼 활용되면서 자율주행과 얼굴인식 기술이 새롭게 등장하는 발판을 마련했습니다. 예를 들어 딥러닝 어린이 애플리케이션은 CNN을 통해 수천 개의 병리학 보고서를 분석하고 암세포를 시간적으로 검출합니다. 자율주행자동차가 객체를 감지해 도로표지판과 보행자의 차이를 구분할 수 있는 것도 바로 CNN 덕분이다.CNN은 다른 뉴럴 네트워크와 마찬가지로 입력 계층, 출력 계층 및 2계층 간의 다양한 은닉 계층으로 구성됩니다.


    >


    각 계층은, 해당 데이터만이 가지는 특징을 학습하기 위해서, 데이터를 변경하는 계산을 실시할 것이다. 가장 많이 사용되는 계층으로는 컨볼루션, 활성화/RELU, 풀링이 있습니다.#벌루우션은 이미지들에서 특정 특징을 활성화하는 벌루우션 필터 집합에 입력 화상을 허가합니다. ​#ReLU(Rectified Linear Unit)는 소음 수의 값을 0에 매핑과 양수 값을 유지하고 더 빠르고 효과적인 학습을 가능하게 하는 것이다. 차제에 활성화된 특징만 이후의 계층으로 전달되기 때문에 이 과정을 활성화라고 부르기도 할 것이다.#풀링은 비선형 다운 샘플링을 실시해 네트워크로 학습해야 할 매개 변수수를 줄여 출력을 간소화 할 것이다.이런 작업이 수십 개 또는 수백 개 계층에서 반복되며 각 계층이 다양한 특징을 검출하는 방법을 배웁니다.


    >


    복수의 컨볼루션 계층으로 구성된 네트워크의 예. 필터는 각 학습 이미지에 서로 다른 해상도로 적용되며, 필터 출력은 이 한계층의 입력으로 활용됩니다.Keras를 사용하는 코드순서도 상단의 CN구조와 하나를 둡니다. 직관적이고 이해가 빨라져요.import sysimport tensorflow astfimport keras from keras. modelsimport Sequential from keras.layers import Dense, Dropout, Flatten from keras.layers.convolutional import Conv2D, MaxPooling2Dimport numpy as np​ img_rows=28img_cols=28​(x_train, y_train)(x_test, y_test)=keras.datasets.mnist.load_data()​ input_shape=(img_rows, img_cols, 일)x_train=x_train.reshape(x_train.shape[0], img_rows, img_cols, 일)x_test=x_test.reshape(x_test.shape[0], img_rows, img_cols, 일)​ x_train=x_train.astype('float32')/255.x_test=x_test.astype('float32')/255. ​ print('x_train shape:', x_train.shape)print(x_train.shape[0],'train samples')print(x_test.shape[0],'test samples')​ batch_size=일 28num_classes=일 0epochs=일 2#몇번이나 학습하면 좋겠지만 시각 관계상 3번만 학습하고 결과를 확인합니다. ​ y_train=keras.utils.to_categorical(y_train, num_classes)y_test=keras.utils.to_categorical(y_test, num_classes)​ model=Sequential()model.add(Conv2D(32, kernel_size=(5,5), strides=(일본, 일본), padding='same', activation='relu', input_shape=input_shape)model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)model.add(Conv2D(64(2,2), activation='relu', padding='same')model.add(MaxPooling2D(pool_size=(2,2)model.add(Dropout(0.25)model.add(Flatten()model.add(Dense(한 000, activation='relu')model.add(Dropout(0.5)model.add(Dense(num_classes, activation='softmax')model.summary()​ model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])hist=model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=일, validation_data=(x_test, y_test)​ score=model.evaluate(x_test, y_test, verbose=0)print('Test loss:', score[0])print('Test accuracy:', score[일본])​ 60,000개 전체를 한 2번 학습하는 것에 많은 시각이 소요됩니다.결과는 99. 것 4%정확도가 나 오프 라이다. ​ Test loss:0.02729845507494465Test accuracy:0.99일 4​ 학습의 결과를 그림으로 확인하고 보고 싶다면 위의 코드 아래에 해안 같은 코드를 추가합니다. 일 6개의 학습 결과를 비교합니다.import randomimport matplotlib.pyplot as plt​ predicted_result=model.predict(x_test)predicted_labels=np.argmax(predicted_result, axis=일)​ test_labels=np.argmax(y_test, axis=일)​ count=0​ plt.figure(figsize=(일 2,8)for n in range(일 6):count+=일 plt.subplot(4,4, count)plt.imshow(x_test[n].reshape(28,28), cmap='Greys', interpolation='nearest')tmp="Label:"+str(test_labels[n])+", Prediction:"+str(predicted_labels[n])plt.title(tmp)​ plt.tight_layout()plt.show()


    >



    댓글

Designed by Tistory.