GartnerTop10전략 기술 동향 10위

인공 지능, 생동감 넘치는 체험, 디지털 쌍둥이, 이벤트, 지속적인 적응형 보안이 차세대 디지털 비즈니스 모델과 에코 시스템을 위한 토대를 마련합니다.

디자이너들은 어떻게 자동차를 더 안전하게 만드는가? 그들은 그들을 마치 물고기처럼 취급한다. 최근 혼다가 발표한 세이프 스웨이는 차량들이 근처의 다른 차들에게 정보를 전달할 수 있도록 차량 대 차량 통신을 이용한다. 예를 들어, 도로 위의 사고 수마일에 대한 경고는 교통 사고를 방지하고 교통을 완화하기 위해 지능적이고 지능적으로 작동할 수 있게 해 줄 수 있다.

집단 사고와 같은 지능적인 것들의 진화와 같은 지능적인 것들은 광범위한 산업적 영향력과 상당한 잠재력의 잠재력을 가진 10가지 전략적 경향들 중 하나이다.

"지속적인 디지털 비즈니스 발전은 직원, 파트너 및 고객을 위한 새로운 디지털 모델을 더욱 긴밀하게 조화시키고 있습니다."라고 Gartner의 올랜도 시에 있는 Gartner2017Symposium부사장 겸 Gartner동료 DavidCearley씨가 말했습니다. "기술은 미래의 디지털 비즈니스에 모든 것에 포함될 것입니다."

인텔리전트 디지털 메쉬

Gartner는 지능형 디지털 메시를 사용하는 사람, 장치, 콘텐츠 및 서비스의 네트워크를 호출합니다. 디지털 비즈니스를 지원하기 위해 디지털 모델, 비즈니스 플랫폼 및 풍부한 지능형 서비스 셋을 사용할 수 있습니다.

지능형:AI가 실질적으로 거의 모든 기술을 갖추고 있고, 잘 정의된 초점을 맞출 수 있는 방법은 보다 동적이고 유연하며 잠재적으로 자율적인 시스템을 구현할 수 있습니다.

디지털:가상 및 실제 환경을 확대하여 생동감 넘치는 디지털 및 연결 환경을 구축합니다.

확대:디지털 결과를 전달하기 위해 확장되는 인력, 사업체, 장치, 콘텐츠 및 서비스 간의 연결.

Gartner Top 10 Strategic Technology Trends for 2018 AI, intelligent apps, intelligent things

Intelligent

Trend No. 1: AI Foundation

(AI 인공지능 기반)

의사 결정을 강화하고, 비즈니스 모델과 생태계를 재창조하고, 고객 만족도를 높이기 위해 AI를 사용하는 능력은 2025년까지 디지털 이니셔티브를 추진할 것이다.

끊임없이 증가하는 문의 사항의 증가를 감안할 때, 이자율이 증가하고 있다는 것은 분명하다. 최근 Gartner설문 조사에 따르면 조직의 59%가 AI전략을 구축하고 있으며, 나머지는 이미 지능형 솔루션을 구축하거나 채택하는 과정에서 진전을 이루고 있는 것으로 나타났습니다.

비록 인공 지능을 바르게 사용하는 것은 인간이 할 수 있는 모든 지능적인 임무를 수행하고 인간이 하는 것만큼 동적으로 학습할 수 있는 지능적인 임무를 수행한다. 이 과제에 최적화된 알고리즘을 사용하여 특정 작업을 수행하거나 제어 환경에서 차량을 구동하는 것과 같은 특정한 작업(예:언어를 이해하거나 제어하는 것)으로 구성된 매우 정밀한 기계 학습 솔루션입니다. "기업들은 편협한 AI기술을 이용한 응용 프로그램에 의해 지원되는 응용 프로그램에 집중하고 일반적인 AI를 연구자들과 공상 과학 작가들에게 맡겨야 합니다."라고 Celeley는 말합니다.


Trend No. 2: Intelligent Apps and Analytics

지능형 애플리케이션 및 분석
향후 몇년간 모든 애플리케이션, 애플리케이션 및 서비스는 어느 수준에서나 AI를 통합할 것입니다. AI는 완전히 새로운 응용 분야를 배경으로 하는 어플리케이션들의 배경에서 볼 수 없을 정도로 무의식적으로 운영될 것이다. AI는 ERP의 측면을 포함한 광범위한 소프트웨어 및 서비스 시장에서 차세대 경쟁 구도가 되었다. "패키지 소프트웨어 및 서비스 공급 업체에 도전하여 지능형 분석, 지능형 프로세스 및 고급 사용자 환경에서 새로운 버전의 비즈니스 가치를 창출할 수 있는 방법을 소개합니다."라고 Cearley는 말합니다.

지능형 애플리케이션은 또한 사람과 시스템 간의 새로운 지능형 중간 계층을 만들어 내고, 가상 고객 보조 및 기업 컨설턴트 및 보조원과 같이 업무의 특성과 작업 공간을 혁신할 수 있습니다. 

"지능형 애플리케이션을 사람들을 대체하는 방식으로 단순화하는 방법으로 지능적인 애플리케이션을 탐색하는 방법은 아닙니다."라고 Cearley는 말합니다. 증강 분석은 특히 광범위한 비즈니스 사용자, 운영자 및 시민 데이터 과학자에게 데이터 준비, 통찰력 및 통찰력을 제공하는 기계 학습을 자동화하는 데 사용되는 전략적 성장 영역입니다.


Trend No. 3: Intelligent Things

클라우드로의 클라우드 전환
Edge컴퓨팅은 정보 처리 및 컨텐츠 수집 및 전송이 이 정보의 소스에 더 가깝게 배치되는 컴퓨팅 토폴로지를 설명합니다. 연결 및 지연 시간 문제, 대역 폭 제약 및 에지에 포함된 더 큰 기능은 분산 모델을 선호합니다. 기업은 특히 중요한 IoT요소를 갖춘 인프라 스트럭처 아키텍처에서 인프라 스트럭처 설계 패턴을 사용하기 시작해야 합니다. 좋은 시작 지점은 코로 케이션 및 특정 네트워크 관련 네트워킹 기능을 사용할 수 있습니다.

클라우드와 에지 컴퓨팅이 경쟁적인 접근법이라고 가정하는 것은 일반적으로 개념에 대한 근본적인 오해입니다. Edge컴퓨팅은 컨텐츠, 컴퓨팅 및 프로세싱을 사용하여 네트워킹의 사용자 인터페이스 또는"에지"에 대한 보다 자세한 정보를 제공하는 컴퓨팅 토폴로지를 말합니다. 클라우드는 기술 서비스를 이용하여 기술 서비스를 제공하는 시스템이지만, 서비스를 제공하는 서비스를 제공하는 서비스를 제공하지 않습니다. 함께 구현될 때 클라우드 서비스는 서비스 지향 모델을 생성하는 데 사용되며, 클라우드 서비스는 연결되지 않은 클라우드 서비스를 실행할 수 있는 제공 방식을 제공합니다.

Trend No. 6: Conversational Platforms

대화형 플랫폼
대화형 플랫폼은 사용자가 컴퓨터에서 컴퓨터로 전환하는 번거로움을 일으키는 패러다임의 변화를 주도하게 됩니다. 이러한 시스템들은 간단한 답변을 할 수 있다. 대화형 플랫폼이 직면한 과제는 사용자가 매우 체계적인 방식으로 소통해야 한다는 점입니다. 이는 종종 실망스러운 경험입니다. 대화형 플랫폼의 주된 차별화 요소는 복잡한 결과를 전달하기 위해 타사 서비스에 액세스하고 사용하는 데 사용되는 대화형 모델과 API및 이벤트 모델의 견고함과 동기화입니다.

Trend No. 7: Immersive Experience

즉흥적 경험
증강 현실(AR), 가상 현실(VR)및 혼합 현실은 사람들이 디지털 세상을 인식하고 소통하는 방식을 바꾸고 있습니다. 대화형 플랫폼과 결합하여 사용자 경험이 보이지 않는 환경에서 사용자 환경의 근본적인 변화가 나타날 것입니다. 애플리케이션 벤더, 시스템 소프트웨어 공급 업체 및 개발 플랫폼 벤더가 이 모델을 제공하기 위해 경쟁합니다.

향후 5년 동안 사용자는 물리적 환경을 유지하면서 디지털 및 실제 객체와 상호 작용하는 생동감 있는 경험으로 부각되는 복합적인 현실에 초점을 맞추게 됩니다. 혼합된 현실은 스펙트럼을 따라 존재하며, AR이나 VR기반 AR뿐만 아니라 AR또는 태블릿 기반 AR에 대한 Head-mounted(HMD)를 포함합니다. 모바일 기기와 애플의 아이 폰 엑스, 구글의 탱고, 구글과 같은 크로스 플랫폼 소프트웨어 개발 키트의 유용성을 감안할 때, 우리는 스마트 폰 기반 AR소프트웨어 개발 키트와 스마트 폰 기반 AR을 2018년에 가열할 것으로 기대합니다.

Mesh

Trend No. 8: Blockchain블록

Blockahain은 개별 애플리케이션이나 참가자와는 무관하게 비즈니스 마찰을 배제하는 분산형 분산형 분산형 분산형 계정입니다. 그것은 신뢰할 수 없는 당사자들이 상업 거래를 교환할 수 있게 해 준다. 이 기술은 산업을 변화시킬 약속을 하고 있지만, 대화는 종종 재정적 기회를 수반하지만, 블록는 정부, 의료, 콘텐츠 유통, 공급망 등에 많은 잠재적인 애플리케이션을 가지고 있다. 하지만, 많은 블로슈차인 기술은 미숙하고 검증되지 않았고 대체로 규제되지 않았다.

blockshan에 대한 실용적인 접근법은 비즈니스 기회, 즉 Blockshain, Trust아키텍처의 능력, 신뢰 아키텍처 및 필요한 구현 기술에 대한 명확한 이해를 요구합니다. 디스트리뷰터가 배포된 프로젝트를 시작하기 전에 팀의 암호화 기술이 무엇인지 이해할 수 있도록 암호화 기술을 보유하고 있어야 합니다. 기존 인프라 스트럭처와의 통합 지점을 식별하고 플랫폼의 진화 및 성숙도를 모니터링합니다. 벤더와 상호 작용할 때 극도로 주의를 기울이고,"블록차"라는 용어를 사용하는 방법을 명확하게 식별합니다.

Trend No. 9: Event-Driven

EVENT
디지털 비즈니스는 새로운 디지털 비즈니스를 활용할 수 있는 능력에 의존하고 있습니다. 비즈니스 이벤트는 구매 주문 작성과 같은 중요한 상태 또는 주 변경 사항의 발견을 반영합니다. 일부 비즈니스 이벤트 또는 이벤트 조합은 비즈니스의 몇가지 특정 비즈니스 활동을 요구하는 탐지된 상황을 구성합니다. 가장 중요한 비즈니스 순간은 개별 애플리케이션, LOB(LineofBusiness)또는 파트너와 같은 여러 당사자에게 영향을 미치는 것입니다. 

AI, IoT및 기타 기술의 출현으로 비즈니스 이벤트가 보다 신속하게 보다 신속하게 파악되고 분석될 수 있습니다. 기업들은 디지털 비즈니스 전략의 일환으로 "이벤트 사고"를 받아들여야 합니다. 2020년까지, 전자 상거래의 실시간 상황 인식은 디지털 비즈니스 솔루션의 80%에 필수적인 특성이 될 것이며, 새로운 비즈니스 생태계의 80%는 이벤트 처리를 위한 지원이 필요할 것이다.

Trend No. 10: Continuous Adaptive Risk and Trust

지속적인 AdaptiveRisk및 신뢰성
디지털 비즈니스는 복잡하고 진화하는 보안 환경을 조성합니다. 점점 더 정교해 지는 도구를 사용하면 위협 잠재력이 높아집니다. 연속적인 AdaptiveRisk및 신뢰성 평가(CARTA)는 보안 가능한 디지털 비즈니스에 대한 적응형 대응으로 실시간, 위험 및 신뢰성 기반 의사 결정을 지원합니다. 신뢰보다는 소유권과 통제를 사용하는 전통적인 보안 기법은 디지털 세상에서 작동하지 않습니다. 인프라 스트럭처 및 주변 보호 기능은 정확한 감지를 보장하지 않으며, 따라서 내부의 내부자 공격으로부터 보호할 수 없습니다. 이를 통해 보안 중심의 보안을 수용하고 보안 조치에 대한 책임을 지도록 개발자에게 권한을 부여할 필요가 있습니다. DevOps를 활용하여"DevOOps"프로세스를 구축하고, 네트워크에 침투한 악의적인 기술(예:적응형 가정용)을 탐색하기 위해 보안 기술을 개발하는 것은 CARTA를 현실화하는 새로운 기술입니다.

TensorFlow의 고급 기계 학습 API (tf.estimator)를 사용하면 다양한 기계 학습 모델을 쉽게 구성, 교육 및 평가할 수 있습니다. 이 튜토리얼에서는 tf.estimator를 사용하여 신경 네트워크 분류기를 만들고 Iris 데이터 세트
(Iris data set )에서이를 학습하여 sepal / petal geometry를 기반으로 꽃 종을 예측합니다. 다음 다섯 단계를 수행하는 코드를 작성합니다.

1.Iris 교육 / 테스트 데이터가 포함 된 CSV를 TensorFlow Dataset에로드하십시오.

2.신경 네트워크 분류 자 ​​생성

3.교육 데이터를 사용하여 모델 교육

4.모델의 정확성 평가

5.새 샘플 분류

참고 :이 자습서를 시작하기 전에 TensorFlow를 컴퓨터에 설치해야합니다.

Complete Neural Network Source Code(완전한 신경 네트워크 소스 코드)

다음은 신경망 분류 자의 전체 코드입니다.
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import os
import urllib

import numpy as np
import tensorflow as tf

# Data sets
IRIS_TRAINING
= "iris_training.csv"
IRIS_TRAINING_URL
= "http://download.tensorflow.org/data/iris_training.csv"

IRIS_TEST
= "iris_test.csv"
IRIS_TEST_URL
= "http://download.tensorflow.org/data/iris_test.csv"

def main():
 
# If the training and test sets aren't stored locally, download them.
 
if not os.path.exists(IRIS_TRAINING):
    raw
= urllib.urlopen(IRIS_TRAINING_URL).read()
   
with open(IRIS_TRAINING, "w") as f:
      f
.write(raw)

 
if not os.path.exists(IRIS_TEST):
    raw
= urllib.urlopen(IRIS_TEST_URL).read()
   
with open(IRIS_TEST, "w") as f:
      f
.write(raw)

 
# Load datasets.
  training_set
= tf.contrib.learn.datasets.base.load_csv_with_header(
      filename
=IRIS_TRAINING,
      target_dtype
=np.int,
      features_dtype
=np.float32)
  test_set
= tf.contrib.learn.datasets.base.load_csv_with_header(
      filename
=IRIS_TEST,
      target_dtype
=np.int,
      features_dtype
=np.float32)

 
# Specify that all features have real-value data
  feature_columns
= [tf.feature_column.numeric_column("x", shape=[4])]

 
# Build 3 layer DNN with 10, 20, 10 units respectively.
  classifier
= tf.estimator.DNNClassifier(feature_columns=feature_columns,
                                          hidden_units
=[10, 20, 10],
                                          n_classes
=3,
                                          model_dir
="/tmp/iris_model")
 
# Define the training inputs
  train_input_fn
= tf.estimator.inputs.numpy_input_fn(
      x
={"x": np.array(training_set.data)},
      y
=np.array(training_set.target),
      num_epochs
=None,
      shuffle
=True)

 
# Train model.
  classifier
.train(input_fn=train_input_fn, steps=2000)

 
# Define the test inputs
  test_input_fn
= tf.estimator.inputs.numpy_input_fn(
      x
={"x": np.array(test_set.data)},
      y
=np.array(test_set.target),
      num_epochs
=1,
      shuffle
=False)

 
# Evaluate accuracy.
  accuracy_score
= classifier.evaluate(input_fn=test_input_fn)["accuracy"]

 
print("\nTest Accuracy: {0:f}\n".format(accuracy_score))

 
# Classify two new flower samples.
  new_samples
= np.array(
     
[[6.4, 3.2, 4.5, 1.5],
       
[5.8, 3.1, 5.0, 1.7]], dtype=np.float32)
  predict_input_fn
= tf.estimator.inputs.numpy_input_fn(
      x
={"x": new_samples},
      num_epochs
=1,
      shuffle
=False)

  predictions
= list(classifier.predict(input_fn=predict_input_fn))
  predicted_classes
= [p["classes"] for p in predictions]

 
print(
     
"New Samples, Class Predictions:    {}\n"
     
.format(predicted_classes))

if __name__ == "__main__":
    main
()

다음 섹션에서는 코드를 자세히 설명합니다.

Load the Iris CSV data to TensorFlow / Iris CSV데이터를 TensorFlow에 로드.

Iris 데이터 세트에는 Iris setosa, Iris virginica 및 Iris versicolor와 같은 세 가지 관련된 Iris 종 각각에서 추출한 50 개의 샘플로 구성된 150 행의 데이터가 들어 있습니다.

Petal geometry compared for three iris species: Iris setosa, Iris virginica, and Iris versicolor

왼쪽에서 오른쪽으로 Iris setosa (Radomil, CC BY-SA 3.0), Iris versicolor (Dlanglois, CC BY-SA 3.0), Iris virginica (Frank Mayfield, CC BY-SA 2.0) 입니다.

각 행은 각 꽃 샘플에 대한 다음 데이터를 포함합니다 : 꽃잎 길이, 꽃잎 너비, 꽃잎 길이, 꽃잎 너비 및 꽃 종. 꽃 종은 정수로 표시되며, 0은 아이리스 세토 사, 1은 아이리스 versicolor, 2는 아이리스 virginica를 나타냅니다.

Sepal LengthSepal WidthPetal LengthPetal WidthSpecies
5.13.51.40.20
4.93.01.40.20
4.73.21.30.20
7.03.24.71.41
6.43.24.51.51
6.93.14.91.51
6.53.05.22.02
6.23.45.42.32
5.93.05.11.82

이 자습서에서는 아이리스 (Iris) 데이터가 무작위로 분리되어 두 개의 별도 CSV로 나뉩니다.

시작하려면 먼저 필요한 모든 모듈을 가져오고 데이터 세트를 다운로드하고 저장할 위치를 정의하십시오.

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import os
import urllib

import tensorflow as tf
import numpy as np

IRIS_TRAINING
= "iris_training.csv"
IRIS_TRAINING_URL
= "http://download.tensorflow.org/data/iris_training.csv"

IRIS_TEST
= "iris_test.csv"
IRIS_TEST_URL
= "http://download.tensorflow.org/data/iris_test.csv"

그런 다음 교육 및 테스트 세트가 로컬에 저장되어 있지 않으면 다운로드하십시오.

if not os.path.exists(IRIS_TRAINING):
  raw
= urllib.urlopen(IRIS_TRAINING_URL).read()
 
with open(IRIS_TRAINING,'w') as f:
    f
.write(raw)

if not os.path.exists(IRIS_TEST):
  raw
= urllib.urlopen(IRIS_TEST_URL).read()
 
with open(IRIS_TEST,'w') as f:
    f
.write(raw)

다음으로 learn.datasets.base의 load_csv_with_header () 메소드를 사용하여 교육 및 테스트 세트를 데이터 세트에로드하십시오. load_csv_with_header () 메소드는 세 가지 필수 인수를 취합니다.

filename 파일 경로를 CSV 파일로 가져옵니다.

target_dtype - 데이터 세트의 대상 값에 numpy 데이터 유형을 사용합니다.

features_dtype : 데이터 집합의 특징 값에 numpy 데이터 유형을 사용합니다.

여기에서 목표 (모델을 예측하기 위해 훈련하는 값)는 0-2의 정수로 꽃의 종류이므로 적절한 numpy 데이터 유형은 np.int입니다.

# Load datasets.
training_set
= tf.contrib.learn.datasets.base.load_csv_with_header(
    filename
=IRIS_TRAINING,
    target_dtype
=np.int,
    features_dtype
=np.float32)
test_set
= tf.contrib.learn.datasets.base.load_csv_with_header(
    filename
=IRIS_TEST,
    target_dtype
=np.int,
    features_dtype
=np.float32)

tf.contrib.learn의 데이터 세트는 튜플로 명명됩니다. 데이터 및 대상 필드를 통해 기능 데이터 및 대상 값에 액세스 할 수 있습니다. 여기서, training_set.data 및 training_set.target은 각각 학습 세트에 대한 피쳐 데이터 및 목표 값을 포함하고, test_set.data 및 test_set.target은 피쳐 데이터 및 테스트 세트에 대한 목표 값을 포함한다.

나중에 "DNNClassifier를 Iris 교육 데이터에 맞추기"에서 training_set.data 및 training_set.target을 사용하여 모델을 교육하고 "모델 정확성 평가"에서 test_set.data 및 test_set.target을 사용합니다. . 하지만 먼저 다음 섹션에서 모델을 구성 해 보겠습니다.

Construct a Deep Neural Network Classifier

tf.estimator는 Estimator라고하는 미리 정의 된 다양한 모델을 제공하며, "즉시"사용하여 데이터에 대한 교육 및 평가 작업을 실행할 수 있습니다. 여기서, 아이리스 (Iris) 데이터에 맞게 딥 뉴럴 네트워크 분류 자 모델을 구성 할 것입니다. tf.estimator를 사용하면 몇 줄의 코드로 tf.estimator.DNNClassifier를 인스턴스화 할 수 있습니다.

# Specify that all features have real-value data
feature_columns
= [tf.feature_column.numeric_column("x", shape=[4])]

# Build 3 layer DNN with 10, 20, 10 units respectively.
classifier
= tf.estimator.DNNClassifier(feature_columns=feature_columns,
                                        hidden_units
=[10, 20, 10],
                                        n_classes
=3,
                                        model_dir
="/tmp/iris_model")

위의 코드는 데이터 집합의 지형지 물에 대한 데이터 형식을 지정하는 모델의 지형지 물 열을 먼저 정의합니다. 모든 기능 데이터는 연속적이므로 tf.feature_column.numeric_column은 기능 컬럼을 구성하는 데 사용할 수있는 적절한 함수입니다. 데이터 세트에는 세 가지 기능 (세퍼리 폭, 세팔 높이, 꽃잎 너비 및 꽃잎 높이)이 있으므로 모든 데이터를 저장하려면 모양을 [4]로 설정해야합니다.


그런 다음 코드는 다음 인수를 사용하여 DNNClassifier 모델을 만듭니다.

1. feature_columns = feature_columns. 위에 정의 된 기능 열 집합입니다.

2. hidden_units = [10, 20, 10]. 10, 20 및 10 개의 뉴런을 포함하는 3 개의 숨겨진 레이어입니다.

3. n_classes = 3. 3 개의 아이리스 종을 나타내는 3 개의 대상 클래스입니다.

4. model_dir = / tmp / iris_model. 모델 교육 중에 TensorFlow가 검사 점 데이터와 TensorBoard 요약을 저장할 디렉토리입니다.

Describe the training input pipeline

tf.estimator API는 모델의 데이터를 생성하는 TensorFlow 조작을 작성하는 입력 기능을 사용합니다. tf.estimator.inputs.numpy_input_fn을 사용하여 입력 파이프 라인을 생성 할 수 있습니다.

# Define the training inputs
train_input_fn
= tf.estimator.inputs.numpy_input_fn(
    x
={"x": np.array(training_set.data)},
    y
=np.array(training_set.target),
    num_epochs
=None,
    shuffle
=True)

Fit the DNNClassifier to the Iris Training Data

이제 DNN 분류기 모델을 구성 했으므로 train 메서드를 사용하여 Iris 교육 데이터에 맞출 수 있습니다. train_input_fn을 input_fn으로 전달하고 훈련 단계 수를 입력하십시오 (here, 2000).

# Train model.
classifier
.train(input_fn=train_input_fn, steps=2000)

모델의 상태는 분류 기준에 유지되므로 원하는 경우 반복적으로 학습 할 수 있습니다. 예를 들어, 위의 내용은 다음과 같습니다.

classifier.train(input_fn=train_input_fn, steps=1000)
classifier
.train(input_fn=train_input_fn, steps=1000)

그러나 기차를 타는 동안 모델을 추적하려는 경우 TensorFlow SessionRunHook을 사용하여 로깅 작업을 수행하는 것이 좋습니다.


Evaluate Model Accuracy / 모델 정확도 평가


Iris 교육 데이터에서 DNNClassifier 모델을 교육했습니다. 이제 평가 방법을 사용하여 아이리스 테스트 데이터에서 정확성을 확인할 수 있습니다. train과 마찬가지로 evaluate은 입력 파이프 라인을 만드는 입력 함수를 사용합니다. evaluate은 평가 결과로 dicts를 반환합니다. 다음 코드는 Iris 테스트 data-test_set.data와 test_set.target을 전달하여 결과의 정확성을 평가하고 인쇄합니다.

# Define the test inputs
test_input_fn
= tf.estimator.inputs.numpy_input_fn(
    x
={"x": np.array(test_set.data)},
    y
=np.array(test_set.target),
    num_epochs
=1,
    shuffle
=False)

# Evaluate accuracy.
accuracy_score
= classifier.evaluate(input_fn=test_input_fn)["accuracy"]

print("\nTest Accuracy: {0:f}\n".format(accuracy_score))

참고 : numpy_input_fn에 대한 num_epochs = 1 인수가 중요합니다. test_input_fn은 데이터를 한 번 반복 한 다음 OutOfRangeError를 발생시킵니다. 이 오류는 분류 작업이 평가를 중단하도록 신호를 보내므로 입력을 한 번 평가합니다.

전체 스크립트를 실행하면 다음과 유사한 내용이 인쇄됩니다.

Test Accuracy: 0.966667

정확도 결과는 약간 다를 수 있지만 90 % 이상이어야합니다. 상대적으로 작은 데이터 세트는 나쁘지 않습니다!


새 샘플 분류


견적 기의 predict () 메소드를 사용하여 새 견본을 분류하십시오. 예를 들어,이 두 가지 새로운 꽃 샘플이 있다고 가정 해보십시오.

Sepal LengthSepal WidthPetal LengthPetal Width
6.43.24.51.5
5.83.15.01.7

predict () 메서드를 사용하여 해당 종을 예측할 수 있습니다. predict는 목록으로 쉽게 변환 될 수있는 dicts 생성자를 반환합니다. 다음 코드는 클래스 예측을 검색하고 인쇄합니다.

# Classify two new flower samples.
new_samples
= np.array(
   
[[6.4, 3.2, 4.5, 1.5],
     
[5.8, 3.1, 5.0, 1.7]], dtype=np.float32)
predict_input_fn
= tf.estimator.inputs.numpy_input_fn(
    x
={"x": new_samples},
    num_epochs
=1,
    shuffle
=False)

predictions
= list(classifier.predict(input_fn=predict_input_fn))
predicted_classes
= [p["classes"] for p in predictions]

print(
   
"New Samples, Class Predictions:    {}\n"
   
.format(predicted_classes))

결과는 다음과 같습니다.

New Samples, Class Predictions:    [1 2]

따라서 모델은 첫 번째 샘플이 Iris versicolor이고 두 번째 샘플은 Iris virginica라고 예측합니다.


추가 리소스


tf.estimator를 사용하여 선형 모델을 만드는 방법에 대한 자세한 내용은 TensorFlow를 사용하는 대규모 선형 모델을 참조하십시오.

tf.estimator API를 사용하여 사용자의 Estimator를 빌드하려면 tf.estimator에서 Estimator 만들기를 확인하십시오.

브라우저에서 신경망 모델링 및 시각화를 실험하려면 Deep Playground를 확인하십시오.

신경 네트워크에 대한 고급 자습서는 길쌈 신경 네트워크 및 순환 신경 네트워크를 참조하십시오.



++++++

csv 파일을 원하는 데이터를 입력하면 간단히 판단하는 프로그램 및 그래프를 얻을 수 있습니다.

일정한 데이터를 가지고 판별하는 그래프 및 수식을 만들지 않고 원하는 것을 만들 수 있습니다.

글보다는 csv파일을 원하는 것으로 직접 수정하셔서 활용해보시면 더 빠른 이해를 하실 수 있습니다.


Heng Balance Lamp - 공중에서 스위치가있는 독특한 램프


이 램프(스탠드)는 공중에서 스위치를 사용하여 기존의 방식에서 벗어나고 있습니다. 

독특하고 창의성이 독보여서 소개하고자 합니다.

독특한 디자인이 당신의 삶에 마법 및 엣지함을 불어 넣습니다.

현재 웹 사이트에서 사전 주문을 할 수 있습니다. http://www.allocacoc.com/DesignNest/detail/id/103.html

모두가 스탠드를 알고 있기 때문에, 사진부터 보여드리겠습니다.

 

 

 

  무엇이 특별한지 감 잡으셨나요??

제품의 본 설명을 시작하겠습니다.

램프를 켜고 끄는 전통적인 방법에 지겨워합니까? 

예상대로 작동하는 혁신적인 탁상용 램프를 찾고 계십니까?

그런 다음 HENG 밸런스 램프로 단조로운 삶을 살기위한 새로운 방법을 시도해야합니다!

HENG 램프는 자석이 내장 된 나무 프레임 안에 두 개의 구슬로 이루어진 스위치 구조를 가지고 있습니다. 

자석을 움직이면 자석이 서로 끌어 당겨 스위치를 트리거합니다.


그것은 방을 밝게하는 새롭고 상호 작용하는 방법입니다!

두 개의 볼은 램프의 스위치입니다. 하단 볼을 들어 올리면 두 개의 볼을 서로의 자석과 함께 그려 넣습니다. 먼저 그들은 공기 중에 흘러서 균형에 도달하면 불이 들어올 것입니다.


HENG을 사용하면 재미 있고 혁신적이며 상호 작용적인 트위스트가 생깁니다.

HENG 램프는 매력적인 곡선 디자인으로 나무 구조를 통과하는 빛의 환영을 만듭니다.


이 램프의 가장 마법적인 요소는 스위치입니다. 두 개의 나무 공이 전등 스위치로 작동합니다. 일단 아래쪽 공을 들고 위쪽 공 부근에 놓으면 두 공은 램프의 중간에서 균형을 잡고 공중에 떠있게됩니다. 저울에 도달하면 램프가 켜집니다.


이 디자인은 쉬운 구조로되어있어 대량 생산이 용이합니다. HENG은 이미 프로토 타입 단계에 있으며 시장에 출시 될 준비가 될 것입니다.

우리는 당신이 자연에 가깝게 느끼기를 원하기 때문에 Heng Lamp를 만들기 위해 고품질의 목재를 선택했습니다. 이것은 따뜻하고 자연스러운 외모를 줄 것이며 연구실, 침실 및 거실과 같은 모든 유형의 객실에 적합합니다.




앞으로도 해외에서의 신기하고 독특한 제품 있으면 자주 소개하도록 하겠습니다.




TensorFlow Mechanics 101

Code: tensorflow/examples/tutorials/mnist/


본 자습서의 목적은 TensorFlow를 사용하여(고전적인)MNIST데이터 세트를 사용하여 손으로 작성된 손가락을 사용하여 간단한 피드 포워드 신경 네트워크를 훈련하고 평가하는 방법입니다. 본 자습서의 대상은 TensorFlow를 사용하는 데 관심이 있는 숙련된 사용자를 위한 것입니다.

이러한 자습서는 일반적으로 기계 학습을 가르치기 위한 것이 아닙니다.

TensorFlow를 설치하기 위한 지침을 준수했는지 확인하십시오.


튜토리얼 파일

이 자습서는 다음 파일을 참조합니다.

파일 목적

mnist.py : 완전히 연결된 MNIST 모델을 빌드하는 코드.

fully_connected_feed.py : 피드 사전을 사용하여 다운로드 된 데이터 세트에 대해 빌드 된 MNIST 모델을 학습하는 기본 코드.

교육을 시작하려면 직접 fully_connected_feed.py 파일을 실행하기 만하면됩니다.

python fully_connected_feed.py

데이터 준비

MNIST는 기계 학습의 전형적인 문제입니다. 문제는 회색으로 된 숫자 280x28픽셀 이미지를 보고이미지가 0에서 9까지의 숫자에 대해 나타내는 숫자를 판별하는 것입니다.

MNIST Digits

자세한 내용은 YanLecun의 MNIST페이지 또는 NBIST의 시각화를 참조하십시오.

(Yann LeCun's MNIST page or Chris Olah's visualizations of MNIST.)

다운로드.

런타임_데이터 처리()방법의 맨 위에 있는 경우 Input_data.reads_data_sets()함수가 로컬 교육 폴더로 다운로드된 데이터를 다운로드하여 DataSet인스턴스를 반환합니다.

data_sets = input_data.read_data_sets(FLAGS.train_dir, FLAGS.fake_data)

참고 : fake_data 플래그는 단위 테스트 목적으로 사용되며 판독기에서 무시할 수 있습니다.


데이터 집합             목적

data_sets.train                 55000 이미지 및 레이블, 기본 교육용.

data_sets.validation          5000 개의 이미지 및 레이블, 교육 정확도의 반복 검증.

data_sets.test                 훈련 된 정확도의 최종 테스트를 위해 10000 개의 이미지 및 레이블.


입력 및 자리 표시 자

placeholder_inputs () 함수는 입력의 모양을 정의하는 두 개의 tf.placeholder 연산을 생성합니다.이 연산은 batch_size를 포함하여 나머지 그래프와 실제 훈련 예제가 입력됩니다.

images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,
                                                       mnist
.IMAGE_PIXELS))
labels_placeholder
= tf.placeholder(tf.int32, shape=(batch_size))

또한 트레이닝 루프에서 전체 이미지 및 레이블 데이터 세트가 각 단계의 batch_size에 맞게 슬라이스되고 이러한 자리 표시 자 연산과 일치 한 다음 feed_dict 매개 변수를 사용하여 sess.run () 함수로 전달됩니다.


그래프 작성

데이터의 자리 표시자를 만든 후 그래프는 3 단계 패턴 인 추론 (), 손실 () 및 학습 ()에 따라 mnist.py 파일에서 작성됩니다.

inference () - 예측을하기 위해 네트워크를 앞으로 돌리는 데 필요한만큼 그래프를 만듭니다.

loss () - 손실을 생성하는 데 필요한 연산을 추론 그래프에 추가합니다.

training () - 그라디언트를 계산하고 적용하는 데 필요한 연산을 손실 그래프에 추가합니다.


추론

inference () 함수는 출력 예측을 포함하는 텐서를 반환하는 데 필요한만큼 그래프를 작성합니다.

이미지 자리 표시자를 입력으로 사용하고 ReLU 활성화가있는 완전히 연결된 레이어와 출력 로짓을 지정하는 10 개의 노드 선형 레이어가 그 위에 빌드됩니다.

각 계층은 해당 범위 내에서 작성된 항목의 접두사로 사용되는 고유 한 tf.name_scope 아래에 작성됩니다.

with tf.name_scope('hidden1'):

정의 된 범위 내에서 각 레이어에서 사용되는 가중치와 바이어스는 원하는 모양으로 tf.Variable 인스턴스에 생성됩니다.

weights = tf.Variable(
    tf
.truncated_normal([IMAGE_PIXELS, hidden1_units],
                        stddev
=1.0 / math.sqrt(float(IMAGE_PIXELS))),
    name
='weights')
biases
= tf.Variable(tf.zeros([hidden1_units]),
                     name
='biases')

예를 들어, hidden1 범위에서 생성 된 경우 weights 변수에 고유 한 이름이 "hidden1 / weights"가됩니다.

각 변수에는 초기화 작업이 주어진다.

이 가장 일반적인 경우, 가중치는 tf.truncated_normal로 초기화되고 2 차원 텐서의 모양이 주어지면 가중치가 연결되는 레이어의 단위 수를 나타내는 첫 번째 흐림과 수를 나타내는 두 번째 흐림이 표시됩니다 가중치가 연결되는 계층의 단위. hidden1이라는 첫 번째 레이어의 경우, 가중치가 이미지 입력을 hidden1 레이어에 연결하기 때문에 크기는 [IMAGE_PIXELS, hidden1_units]입니다. tf.truncated_normal 초기화 프로그램은 주어진 평균 및 표준 편차로 임의의 분포를 생성합니다.

그런 다음 바이어스를 tf.zeros로 초기화하여 모든 0 값으로 시작하도록하고 그 모양은 연결되는 레이어의 단위 수입니다.

그래프의 세 가지 주요 작업 - 숨겨진 레이어에 대해 tf.matmul 및 로그에 대해 하나의 추가 tf.matmul을 포함하는 두 개의 tf.nn.relu ops가 차례로 생성되고 각 인스턴스에는 각각 별도의 tf.Variable 인스턴스가 생성됩니다 입력 자리 표시 자의 이전 텐서 또는 이전 레이어의 출력 텐서.

hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)
hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)
logits = tf.matmul(hidden2, weights) + biases

마지막으로 출력을 포함하는 로그 텐서가 반환됩니다.


손실

loss () 함수는 필요한 손실 작업을 추가하여 그래프를 작성합니다.

먼저 labels_placeholder의 값이 64 비트 정수로 변환됩니다. 그런 다음 tf.nn.sparse_softmax_cross_entropy_with_logits op가 추가되어 labels_placeholder에서 1- 핫 레이블을 자동으로 생성하고 inference () 함수의 출력 로그를 1- 핫 레이블과 비교합니다.

labels = tf.to_int64(labels)
cross_entropy
= tf.nn.sparse_softmax_cross_entropy_with_logits(
    labels
=labels, logits=logits, name='xentropy')

그런 다음 tf.reduce_mean을 사용하여 일괄 처리 차원 (첫 번째 차원)에서 교차 엔트로피 값을 전체 손실로 평균화합니다.

loss = tf.reduce_mean(cross_entropy, name='xentropy_mean')

그리고 나서 손실 값을 포함 할 텐서가 반환됩니다.

노트 : 교차 엔트로피는 정보 이론의 아이디어로, 실제로 사실 인 것을 감안할 때 신경망의 예측을 얼마나 나쁘게 생각하는지 설명 할 수 있습니다. 자세한 내용은 블로그 게시물 Visual Information Theory (http://colah.github.io/posts/2015-09-Visual-Information/)를 참조하십시오.

훈련

training () 함수는 Gradient Descent를 통해 손실을 최소화하는 데 필요한 연산을 추가합니다.

먼저 loss () 함수에서 손실 텐서를 취하여 tf.summary.FileWriter (아래 참조)와 함께 사용할 때 이벤트 파일에 요약 값을 생성하는 연산 인 tf.summary.scalar로 전달합니다. 이 경우 요약이 기록 될 때마다 손실의 스냅 샷 값을 방출합니다.

tf.summary.scalar('loss', loss)

다음으로, 요청 된 학습 속도로 그라데이션을 적용하는 tf.train.GradientDescentOptimizer를 인스턴스화합니다.

optimizer = tf.train.GradientDescentOptimizer(learning_rate)

그런 다음 글로벌 교육 단계에 대한 카운터를 포함하는 단일 변수를 생성하고 tf.train.Optimizer.minimize op는 시스템의 학습 가능한 가중치를 업데이트하고 전역 단계를 증가시키는 데 사용됩니다. 이 작업은 관습에 따라 train_op이라고하며, 한 단계의 교육 (아래 참조)을 유도하기 위해 TensorFlow 세션에서 실행해야하는 작업입니다.

global_step = tf.Variable(0, name='global_step', trainable=False)
train_op
= optimizer.minimize(loss, global_step=global_step)

모델 교육

일단 그래프가 작성되면 fully_connected_feed.py의 사용자 코드에 의해 제어되는 루프에서 반복적으로 트레이닝되고 평가 될 수 있습니다.

그래프

run_training () 함수의 맨 위에는 내장 된 모든 op가 기본 전역 tf.Graph 인스턴스와 연관되어 있음을 나타내는 명령과 함께 python이 있습니다.

with tf.Graph().as_default():

tf.Graph는 그룹으로 함께 실행될 수있는 작업 모음입니다. 대부분의 TensorFlow 사용은 단일 기본 그래프에만 의존해야합니다.

여러 그래프를 사용하는보다 복잡한 용도는 가능하지만이 간단한 자습서의 범위를 벗어납니다.

세션

모든 빌드 준비가 완료되고 필요한 모든 작업이 생성되면 그래프 실행을위한 세션이 만들어집니다.

sess = tf.Session()

또는 세션을 범위 지정을 위해 with 블록으로 생성 할 수 있습니다.

with tf.Session() as sess:

세션에 대한 빈 매개 변수는이 코드가 기본 로컬 세션에 연결 (또는 아직 생성되지 않은 경우 생성)한다는 것을 나타냅니다.

세션을 생성 한 직후, 모든 tf.Variable 인스턴스는 초기화 op에서 tf.Session.run을 호출하여 초기화됩니다.

init = tf.global_variables_initializer()
sess
.run(init)

tf.Session.run 메서드는 매개 변수로 전달 된 op (s)에 해당하는 그래프의 전체 하위 집합을 실행합니다. 이 첫 번째 호출에서 init op는 변수의 초기화 코드 만 포함하는 tf.group입니다. 나머지 그래프는 여기에서 실행되지 않습니다. 그것은 아래의 교육 과정에서 발생합니다.

학습 루프

세션으로 변수를 초기화 한 후 교육이 시작될 수 있습니다.

사용자 코드는 단계별 교육을 제어하며 유용한 교육을 수행 할 수있는 가장 단순한 루프는 다음과 같습니다.

for step in xrange(FLAGS.max_steps):
    sess
.run(train_op)

그러나이 자습서는 이전 단계에서 생성 된 자리 표시 자와 일치시키기 위해 각 단계의 입력 데이터를 슬라이스해야한다는 점에서 약간 더 복잡합니다.

그래프 피드

각 단계에서 코드는 단계에 대한 교육을위한 예제 세트를 포함하는 피드 사전을 생성하며,이 단계는 해당 인스턴스가 나타내는 자리 표시 자 연산에 의해 입력됩니다.

fill_feed_dict () 함수에서 주어진 DataSet은 이미지와 레이블의 다음 batch_size 세트에 대해 쿼리되고 자리 표시 자와 일치하는 tensors는 다음 이미지와 레이블을 포함하여 채워집니다.

images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,
                                               FLAGS
.fake_data)

그런 다음 키와 자리 표시자를 나타내는 파이썬 사전 객체가 생성되고 대표적인 피드 텐서가 값으로 제공됩니다.

feed_dict = {
    images_placeholder
: images_feed,
    labels_placeholder
: labels_feed,
}

이것은 sess.run () 함수의 feed_dict 매개 변수로 전달되어이 단계의 학습에 대한 입력 예제를 제공합니다.

상태 확인

이 코드는 실행 호출에서 가져올 두 값을 지정합니다 : [train_op, loss].

for step in xrange(FLAGS.max_steps):
    feed_dict
= fill_feed_dict(data_sets.train,
                               images_placeholder
,
                               labels_placeholder
)
    _
, loss_value = sess.run([train_op, loss],
                             feed_dict
=feed_dict)

가져올 값은 두 가지이므로 sess.run ()은 두 항목이 포함 된 튜플을 반환합니다. 가져올 값 목록에있는 각 Tensor는 반환 된 튜플의 numpy 배열에 해당하며이 단계에서이 텐서 값이 채워집니다. train_op은 출력 값이없는 Operation이기 때문에 반환 된 튜플의 해당 요소는 None이므로 버려집니다. 그러나 모델이 훈련 중에 분기되면 손실 텐서의 값은 NaN이 될 수 있으므로이 값을 로깅에 사용합니다.

NaN 없이도 교육이 잘 진행된다고 가정하면 교육 과정에서 100 단계마다 간단한 상태 텍스트를 인쇄하여 사용자에게 교육 상태를 알릴 수 있습니다.

if step % 100 == 0:
   
print('Step %d: loss = %.2f (%.3f sec)' % (step, loss_value, duration))

상태 시각화

TensorBoard에서 사용되는 이벤트 파일을 내보내려면 그래프 작성 단계에서 모든 요약 (이 경우 하나만 포함)이 단일 텐서로 수집됩니다.

summary = tf.summary.merge_all()

그리고 나서 세션이 생성 된 후 tf.summary.FileWriter가 인스턴스화되어 그래프 자체와 요약 값을 모두 포함하는 이벤트 파일을 작성할 수 있습니다.

summary_writer = tf.summary.FileWriter(FLAGS.train_dir, sess.graph)

마지막으로, 이벤트 파일은 요약이 평가 될 때마다 새 요약 값으로 업데이트되고 출력이 작성자의 add_summary () 함수에 전달됩니다.

summary_str = sess.run(summary, feed_dict=feed_dict)
summary_writer
.add_summary(summary_str, step)

이벤트 파일을 작성하면 Training 폴더에 대해 TensorBoard를 실행하여 요약의 값을 표시 할 수 있습니다.

MNIST TensorBoard

참고 : Tensorboard를 작성하고 실행하는 방법에 대한 자세한 내용은 함께 제공되는 Tensorboard : Visualizing Learning을 참조하십시오. Tensorboard: Visualizing Learning.

검사 점 저장(체크포인트 저장)

추후 교육이나 평가를 위해 모델을 나중에 복원하는 데 사용할 수있는 검사 점 파일을 내보내려면 tf.train.Saver를 인스턴스화합니다.

saver = tf.train.Saver()

트레이닝 루프에서는 tf.train.Saver.save 메소드가 정기적으로 호출되어 모든 트레이닝 가능한 변수의 현재 값을 사용하여 검사 점 파일을 트레이닝 디렉토리에 씁니다.

saver.save(sess, FLAGS.train_dir, global_step=step)

나중에 추후에 thetf.train.Saver.restore 메소드를 사용하여 모델 매개 변수를 다시로드하여 교육을 재개 할 수 있습니다.

saver.restore(sess, FLAGS.train_dir)


모델 평가

천 단계마다이 코드는 교육 및 테스트 데이터 세트 모두에 대해 모델을 평가하려고 시도합니다. do_eval () 함수는 교육, 유효성 검사 및 테스트 데이터 집합에 대해 세 번 호출됩니다.

print('Training Data Eval:')
do_eval
(sess,
        eval_correct
,
        images_placeholder
,
        labels_placeholder
,
        data_sets
.train)
print('Validation Data Eval:')
do_eval
(sess,
        eval_correct
,
        images_placeholder
,
        labels_placeholder
,
        data_sets
.validation)
print('Test Data Eval:')
do_eval
(sess,
        eval_correct
,
        images_placeholder
,
        labels_placeholder
,
        data_sets
.test)

더 복잡한 사용법은 대개 상당한 양의 하이퍼 매개 변수 튜닝 후에 만 ​​확인되도록 data_sets.test를 격리합니다. 그러나 간단한 MNIST 문제 때문에 모든 데이터에 대해 평가합니다.

평가 그래프 작성

교육 루프를 시작하기 전에 평가 () 함수는 mnist.py에서 loss () 함수와 동일한 logits / labels 매개 변수를 사용하여 evaluation () 함수를 호출하여 작성해야합니다.

eval_correct = mnist.evaluation(logits, labels_placeholder)

evaluation () 함수는 단순히 true 레이블이 K 가장 가능성있는 예측에서 발견 될 수있는 경우 각 모델 출력을 자동으로 득점 할 수있는 tf.nn.in_top_k op를 생성합니다. 이 경우 K의 값을 1로 설정하여 실제 레이블 인 경우 올바른 예측 만 고려합니다.

eval_correct = tf.nn.in_top_k(logits, labels, 1)

평가 출력

그런 다음 feed_dict를 채우고 eval_correct op에 대해 sess.run ()을 호출하여 지정된 데이터 집합에서 모델을 평가하는 루프를 만들 수 있습니다.

for step in xrange(steps_per_epoch):
    feed_dict
= fill_feed_dict(data_set,
                               images_placeholder
,
                               labels_placeholder
)
    true_count
+= sess.run(eval_correct, feed_dict=feed_dict)

true_count 변수는 in_top_k op가 올바른 것으로 판단한 모든 예측을 누적합니다. 거기에서 정밀도는 총 사례 수로 단순히 나누어 계산할 수 있습니다.

precision = true_count / num_examples
print('  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f' %
     
(num_examples, true_count, precision))



연수기란 물을 연하게 한다고 해서 소프너(Softener)라고 합니다.

이온 교환 물 연화제는 부드러운 물을 생성합니다.

소금에 절인 물 연화제는 이온 교환 과정을 이용해 경수를 부드럽게 한다. 오직 이온 교환 과정만이 경수를 추출하는 광물질을 추출함으로써 진정한 물을 진정시킨다.

이온 교환 과정은 주로 미네랄 미네랄을 함유하고 있으며, 주로 칼슘과 마그네슘을 주성분으로 하고 있다. 교환은 미네랄이 자연적으로 이온화되어 있기 때문에 가능한 것으로 추정된다. 이온 교환 과정은 전하가 서로 밀어내는 것과 전하가 서로 끌어당긴다는 사실을 기반으로 합니다.

이온 교환 물 연화제는 고체 미네랄, 칼슘, 마그네슘을 함유한 부드러운 미네랄을 교환합니다. 부드러운 미네랄 알갱이에 함유되어 있어 표면에 축적되지 않고 표면에 축적됩니다.

이온 교환 작동 원리

세개의 미네랄(칼슘, 마그네슘, 나트륨)은 양이온이라 불리는 양이온을 가지고 있다. 이 교환은 적절한 압력 용기 안에 있는 인공 이온 교환 수지에 대한 경도 광물을 포함한 물을 통과하는 물을 통과한다. 대부분의 현대 유연제는 대부분의 현대 유연제로 구성된 합성 수지(알갱이)로 이루어져 있는데, 이것들은 모두 음전하를 띠고 있는 모조품들이다. 수지가 재생되는 상태에서, 이러한 음전하 입자들은 양이온 양이온 양이온을 양이온으로 함유하고 있다. 칼슘과 마그네슘은 수지 탱크를 통해 수지를 통과하는 수지와 접촉하면서 교환 부위에서 나트륨 이온을 분산시킨다. 이온 교환 과정에서 철과 망간과 같은 다른 강력하게 충전된 양이온은 칼슘과 마그네슘과 더불어 제거된다.

이온 교환은 다음 두가지 이유로 가능하다.

1. 모든 양이온은 양전하와 같은 힘을 가지고 있지 않다.

2. 수지는 양이온 양이온보다 더 강한 양이온, 칼슘, 마그네슘을 선호한다.

그 다음으로, 치환된 나트륨 양이온은 수지'베드'를 통과하여 연화제 출구를 통과하므로 연화제는 ' 부드러운 물'을 제공합니다. 또한 탄산 음료를 마시는 것을 보아라.

재충전

결국 모든 합성 수지 교환 사이트들은 칼슘과 마그네슘에 의해 점유되고 있으며, 더 이상 연화 교환이 이루어질 수 없다. 수지는 피곤하고 재생되어야 한다고 한다.

Softener의 수지는 묽은 용액(일반 소금)과 염수 5브라인으로 재 재생됩니다. 재생하는 동안 연화제 공급 물의 흐름이 정지됩니다.

소금물은 희석된 물의 개별적인 흐름과 혼합된 소금물 탱크에서 추출된다. 희석된 브라인 용액은 수지를 통과하며, 칼슘과 마그네슘 이온이 함유된 수지 비드에 접촉합니다. 비록 칼슘과 마그네슘이 나트륨보다 강하지만 농축된 소금물은 더 적은 수의 칼슘과 마그네슘 이온을 치환할 수 있는 더 적은 양의 나트륨 이온을 함유하고 있다. 칼슘과 마그네슘 이온이 교체되면 양이온 이온이 음극 사이트에 끌린다. 결국, 사이트들은 나트륨 이온에 의해 흡수되고, 수지는 재생되고 다음 연화(서비스)사이클을 위해 준비된다고 알려져 있다.


Deep MNIST for Experts (전문가를위한 딥 MNIST)

TensorFlow는 대규모 수치 계산을 수행하는 강력한 라이브러리입니다. 탁월한 과제 중 하나는 심 신경 네트워크를 구현하고 교육하는 것입니다. 이 튜토리얼에서 우리는 TensorFlow 모델의 기본 빌딩 블록을 배우면서 깊은 컨볼 루션 MNIST 분류자를 생성합니다.

이 소개는 신경망과 MNIST 데이터 세트에 익숙하다고 가정합니다. 그들과 배경이 없다면, 초보자를위한 소개를 확인하십시오. 시작하기 전에 반드시 TensorFlow를 설치하십시오.


About this tutorial


이 튜토리얼의 첫 번째 부분에서는 Tensorflow 모델의 기본 구현 인  mnist_softmax.py코드에서 어떤 일이 일어나는지 설명합니다. 두 번째 부분에서는 정확성을 높이는 몇 가지 방법을 보여줍니다.


이 튜토리얼의 각 코드 스 니펫을 복사하여 Python 환경에 붙여 넣거나, 완전히 구현 된 깊은 네트를 mnist_deep.py 에서 다운로드 할 수 있습니다.


이 튜토리얼에서 우리가 달성 할 수있는 것 :

-이미지의 모든 픽셀을 관찰하여 MNIST 숫자를 인식하는 모델 인 softmax 회귀 함수를 만듭니다.

-Tensorflow를 사용하여 수천 가지 사례를 "조사"하여 숫자를 인식하도록 모델을 교육합니다 (첫 번째 Tensorflow 세션을 실행하여 수행)

-테스트 데이터로 모델의 정확성을 확인하십시오.

-결과를 향상시키기 위해 다중 컨볼 루션 신경망을 구축, 훈련 및 테스트합니다.


Setup

모델을 만들기 전에 먼저 MNIST 데이터 세트를로드하고 TensorFlow 세션을 시작합니다.

MNIST 데이터로드

이 자습서의 코드를 복사하여 붙여 넣는 경우 다음 두 줄의 코드를 사용하여 데이터를 자동으로 다운로드하고 읽습니다.
from tensorflow.examples.tutorials.mnist import input_data
mnist
= input_data.read_data_sets('MNIST_data', one_hot=True)
여기서 mnist는 훈련, 검증 및 테스트 세트를 NumPy 배열로 저장하는 간단한 클래스입니다. 또한 아래에 사용할 데이터 minibatches를 반복하는 함수를 제공합니다.

TensorFlow InteractiveSession 시작

TensorFlow는 매우 효율적인 C ++ 백엔드를 사용하여 계산을 수행합니다. 이 백엔드에 대한 연결을 세션이라고합니다. TensorFlow 프로그램의 일반적인 사용법은 먼저 그래프를 만든 다음 세션에서 시작하는 것입니다.
여기서 우리는 편리한 InteractiveSession 클래스를 대신 사용합니다. TensorFlow는 코드 구조화 방법을보다 융통성있게 만듭니다. 그래프를 실행하는 계산 그래프를 작성하는 조작을 인터리브 할 수 있습니다. 이것은 IPython과 같은 대화식 환경에서 작업 할 때 특히 편리합니다. InteractiveSession을 사용하지 않는 경우, 세션을 시작하고 그래프를 시작하기 전에 전체 계산 그래프를 작성해야합니다.
import tensorflow as tf
sess
= tf.InteractiveSession()
계산 그래프

파이썬에서 효율적인 수치 계산을 수행하기 위해 일반적으로 다른 언어로 구현 된 매우 효율적인 코드를 사용하여 파이썬 외부의 행렬 곱셈과 같은 값 비싼 연산을 수행하는 NumPy와 같은 라이브러리를 사용합니다. 불행하게도, 모든 작업을 파이썬으로 다시 전환하면 많은 오버 헤드가 발생할 수 있습니다. 이 오버 헤드는 GPU에서 계산을 실행하거나 데이터를 전송하는 데 비용이 많이 드는 분산 된 방식으로 실행하려는 경우 특히 나쁩니다.

TensorFlow는 파이썬 밖에서도 힘든 작업을 수행하지만이 오버 헤드를 피하기 위해 한 걸음 더 나아갑니다. TensorFlow는 Python과 독립적으로 고가의 단일 연산을 실행하는 대신 Python 외부에서 실행되는 상호 작용하는 연산의 그래프를 설명합니다. 이 방법은 Theano 또는 Torch에서 사용되는 방법과 유사합니다.

따라서 파이썬 코드의 역할은이 외부 계산 그래프를 작성하고 계산 그래프의 어느 부분을 실행해야하는지 지시하는 것입니다. 자세한 내용은 TensorFlow 시작하기의 계산 그래프 섹션을 참조하십시오.

Softmax 회귀 모델 구축

이 섹션에서는 단일 선형 레이어가있는 softmax 회귀 모델을 작성합니다. 다음 섹션에서 우리는 이것을 다중 계층 콘볼 루션 네트워크가있는 softmax 회귀의 경우까지 확장 할 것입니다.

Placeholders
우리는 입력 이미지와 대상 출력 클래스에 대한 노드를 생성하여 계산 그래프를 작성하기 시작합니다.
+ 초급자 버전 및 기본 mnist 튜토리얼과 같은 방법으로 선언이 됩니다.
x = tf.placeholder(tf.float32, shape=[None, 784])
y_
= tf.placeholder(tf.float32, shape=[None, 10])
여기서 x와 y는 특정 값이 아닙니다. 오히려 각각은 자리 표시 자입니다. TensorFlow에 계산을 실행하도록 요청할 때 입력 할 값입니다.

입력 이미지 x는 2 차원 텐서 부동 소수점 수로 구성됩니다. 여기서 우리는 [없음, 784]의 모양을 할당합니다. 여기서 784는 단일 평평한 28x28 픽셀 MNIST 이미지의 차원이며, 없음은 배치 크기에 해당하는 첫 번째 차원이 모든 크기 일 수 있음을 나타냅니다. 목표 출력 클래스 y_는 또한 2d 텐서로 구성되며, 각 행은 해당 MNIST 이미지가 속하는 디지트 클래스 (0에서 9까지)를 나타내는 1 핫 10 차원 벡터입니다.

자리 표시 자에 대한 shape 인수는 선택 사항이지만 TensorFlow가 일치하지 않는 텐서 모양에서 발생하는 버그를 자동으로 잡을 수 있습니다.

Variables

이제 우리 모델에 대한 가중치 W와 편향치 b를 정의합니다. 우리는 이들을 추가 입력과 같이 취급한다고 상상할 수도 있지만 TensorFlow는이를 처리하는 더 좋은 방법을 가지고 있습니다 : 가변. 변수는 TensorFlow의 계산 그래프에있는 값입니다. 그것은 계산에 의해 사용되거나 심지어 수정 될 수 있습니다. 기계 학습 응용 프로그램에서 일반적으로 모델 매개 변수는 변수입니다.
W = tf.Variable(tf.zeros([784,10]))
b
= tf.Variable(tf.zeros([10]))
tf.Variable에 대한 호출에서 각 매개 변수의 초기 값을 전달합니다. 이 경우 W와 b를 0으로 채워진 텐서로 초기화합니다. W는 784x10 행렬 (784 개의 입력 피처와 10 개의 출력이 있기 때문에)이고 b는 10 개의 클래스가 있으므로 10 차원 벡터입니다.

변수는 세션 내에서 사용되기 전에 해당 세션을 사용하여 초기화되어야합니다. 이 단계는 이미 지정된 초기 값 (이 경우에는 0으로 가득 찬 텐서)을 취하여 각 변수에 할당합니다. 이 작업은 모든 변수에 대해 동시에 수행 할 수 있습니다.
sess.run(tf.global_variables_initializer())

Predicted Class and Loss Function

이제 회귀 모델을 구현할 수 있습니다. 한 줄만 필요합니다! 벡터화 된 입력 이미지 x에 가중치 행렬 W를 곱하고 바이어스 b를 더합니다.

y = tf.matmul(x,W) + b
손실 기능을 쉽게 지정할 수 있습니다. 손실은 단일 예에서 모델의 예측이 얼마나 나쁜지를 나타냅니다. 우리는 모든 예제를 통해 교육하면서이를 최소화하려고 노력합니다. 여기서 우리의 손실 함수는 목표와 모델의 예측에 적용되는 softmax 활성화 함수 간의 교차 엔트로피입니다. 초보자 가이드 에서처럼 안정된 공식을 사용합니다.
cross_entropy = tf.reduce_mean(
    tf
.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
tf.nn.softmax_cross_entropy_with_logits는 모델의 비표준 모델 예측에 softmax를 내부적으로 적용하고 모든 클래스에서 합계를 계산하며, tf.reduce_mean은 이러한 합계에 대한 평균을 취합니다.

Train the Model

이제 모델 및 교육 손실 기능을 정의 했으므로 TensorFlow를 사용하여 교육하는 것이 간단합니다. TensorFlow는 전체 계산 그래프를 알고 있으므로 자동 차별화를 사용하여 각 변수에 대한 손실 그라디언트를 찾을 수 있습니다. TensorFlow에는 다양한 내장 최적화 알고리즘이 있습니다. 이 예에서는 교차 엔트로피를 내리기 위해 steepest gradient descent를 단계 길이 0.5로 사용합니다.
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
TensorFlow가 실제로 한 줄에서 계산 한 것은 새로운 연산을 계산 그래프에 추가하는 것이 었습니다. 이러한 작업에는 그라디언트를 계산하고, 매개 변수 업데이트 단계를 계산하고, 매개 변수에 업데이트 단계를 적용하는 작업이 포함되었습니다.

반환 된 작업 train_step을 실행하면 그라데이션 강하 업데이트가 매개 변수에 적용됩니다. 따라서 train_step을 반복적으로 실행하여 모델 교육을 수행 할 수 있습니다.
for _ in range(1000):
  batch
= mnist.train.next_batch(100)
  train_step
.run(feed_dict={x: batch[0], y_: batch[1]})
각 교육 반복마다 100 개의 교육 사례를로드합니다. 그런 다음 feed_dict를 사용하여 place_holder x 및 y_를 학습 예제로 대체하여 train_step 연산을 실행합니다. feed_dict를 사용하여 계산 그래프에서 임의의 텐서를 대체 할 수 있습니다. 단지 자리 표시 자에만 국한되지 않습니다.

Evaluate the Model (모델 평가)

우리 모델은 얼마나 잘 했습니까?

먼저 정확한 라벨 위치를 예측할 것입니다. tf.argmax는 어떤 축을 따라 텐서에서 가장 높은 엔트리의 인덱스를 제공하는 매우 유용한 함수입니다. 예를 들어, tf.argmax (y, 1)는 우리 모델이 각 입력에 대해 가장 가능성이 있다고 생각하는 레이블이고 tf.argmax (y_, 1)는 실제 레이블입니다. tf.equal을 사용하여 예측이 진실과 일치하는지 확인할 수 있습니다.
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
그건 우리에게 불공정 목록을 제공합니다. 어떤 부분이 올바른지 결정하기 위해 부동 소수점 수로 캐스팅 한 다음 평균을 취합니다. 예를 들어, [True, False, True, True]는 [1,0,1,1]이되어 0.75가됩니다.
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
마지막으로 테스트 데이터의 정확성을 평가할 수 있습니다. 이것은 약 92 % 정확해야합니다.
print(accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

Build a Multilayer Convolutional Network

멀티 레이어 컨볼 루션 네트워크 구축


MNIST에서 92 % 정확도를 얻는 것은 좋지 않습니다. 그것은 거의 당황스럽게도 나빴습니다. 이 섹션에서는 아주 단순한 모델에서 중간 정도의 복잡한 것, 즉 작은 콘볼 루션 신경 네트워크로 점프 할 것입니다. 이것은 우리에게 99.2 %의 정확성을 줄 것입니다. 예술 수준은 아니지만 존경 할 만합니다.


무게 초기화


이 모델을 만들려면 많은 가중치와 편향을 만들어야합니다. 일반적으로 대칭 분리를 위해 소량의 잡음을 사용하여 가중치를 초기화하고 0 기울기를 방지해야합니다. 우리가 ReLU(ReLU) 뉴런을 사용하고 있기 때문에, "죽은 뉴런"을 피하기 위해 약간 긍정적 인 초기 바이어스로 초기화하는 것이 좋습니다. 모델을 빌드하는 동안이 작업을 반복적으로 수행하는 대신, 우리를 위해이 작업을 수행하는 두 가지 편리한 기능을 만들어 보겠습니다.

+여기서 ReLU가 나오는데 CNN 및 점점 들어갈 수록 많이 사용되는 용어입니다.

def weight_variable(shape):
  initial
= tf.truncated_normal(shape, stddev=0.1)
 
return tf.Variable(initial)

def bias_variable(shape):
  initial
= tf.constant(0.1, shape=shape)
 
return tf.Variable(initial)

회선 및 풀링


TensorFlow는 또한 컨볼 루션 및 풀링 작업에 많은 유연성을 제공합니다. 경계를 어떻게 처리할까요? 우리의 보폭은 무엇입니까? 이 예에서는 항상 바닐라 버전을 선택합니다. 우리의 컨볼 루션은 1의 보폭을 사용하며 출력이 입력과 동일한 크기가되도록 0으로 채워집니다. 우리의 풀링은 2x2 블록을 넘어서 평범한 오래된 최대 풀링입니다. 코드를보다 깨끗하게 유지하려면 이러한 연산을 함수로 추상화합시다.

def conv2d(x, W):
 
return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

def max_pool_2x2(x):
 
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
                        strides
=[1, 2, 2, 1], padding='SAME')

첫 번째 콘볼 루션 레이어


이제 첫 번째 레이어를 구현할 수 있습니다. 컨볼 루션 (convolution)과 최대 풀링 (max pooling)으로 구성됩니다. 컨볼 루션은 각 5x5 패치에 대해 32 개의 기능을 계산합니다. 그것의 체중 텐서는 [5, 5, 1, 32]의 모양을 가질 것입니다. 처음 두 차원은 패치 크기이고, 다음은 입력 채널 수이고, 마지막은 출력 채널 수입니다. 각 출력 채널에 대한 구성 요소가있는 바이어스 벡터도 갖게됩니다.

W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1
= bias_variable([32])

레이어를 적용하기 위해 먼저 x와 4d 텐서의 형태를 바꾸고 두 번째 및 세 번째 차원은 이미지 너비와 높이에 해당하고 최종 차원은 색상 채널 수에 해당합니다.

x_image = tf.reshape(x, [-1, 28, 28, 1])

우리는 x_image와 체중 텐서를 곱하고, 바이어스를 추가하고, ReLU 함수를 적용하고, 마지막으로 최대 풀을 적용합니다. max_pool_2x2 메소드는 이미지 크기를 14x14로 줄입니다.

h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1
= max_pool_2x2(h_conv1)

두 번째 컨벌루션 레이어


깊은 네트워크를 구축하기 위해이 유형의 여러 레이어를 쌓습니다. 두 번째 레이어에는 각 5x5 패치에 대해 64 개의 기능이 있습니다.

W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2
= bias_variable([64])

h_conv2
= tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2
= max_pool_2x2(h_conv2)

조밀하게 연결된 레이어


이미지 크기가 7x7로 축소되었으므로 전체 이미지에서 처리 할 수 ​​있도록 1024 개의 뉴런이있는 완전히 연결된 레이어를 추가합니다. 우리는 풀링 레이어에서 텐서를 벡터 묶음으로 변형하고, 가중치 행렬을 곱하고, 바이어스를 추가하고, ReLU를 적용합니다.

W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1
= bias_variable([1024])

h_pool2_flat
= tf.reshape(h_pool2, [-1, 7*7*64])
h_fc1
= tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)

DropOut


초과 맞춤을 줄이기 위해 판독 레이어 앞에 드롭 아웃을 적용합니다. 우리는 드롭 아웃 중에 뉴런의 출력이 유지 될 확률에 대한 자리 표시자를 만듭니다. 이것은 우리가 훈련 중에 dropout을 켜고 시험하는 동안 turn off 할 수있게 해줍니다. TensorFlow의 tf.nn.dropout op는 마스킹 외에도 스케일링 뉴런 출력을 자동으로 처리하므로 드롭 아웃은 추가 스케일링 없이도 작동합니다 .

keep_prob = tf.placeholder(tf.float32)
h_fc1_drop
= tf.nn.dropout(h_fc1, keep_prob)

판독 레이어


마지막으로 위의 한 계층 softmax 회귀와 마찬가지로 계층을 추가합니다.


W_fc2 = weight_variable([1024, 10])
b_fc2
= bias_variable([10])

y_conv
= tf.matmul(h_fc1_drop, W_fc2) + b_fc2


차이점은 다음과 같습니다.


-가파른 그라데이션 하강 옵티 마이저를보다 정교한 ADAM 옵티 마이저로 대체 할 것입니다.

-feed_dict에 추가 매개 변수 keep_prob를 포함시켜 드롭 아웃 속도를 제어합니다.

-우리는 교육 과정에서 매 100 번째 반복에 로깅을 추가 할 것입니다.


또한 tf.InteractiveSession보다는 tf.Session을 사용할 것입니다. 이렇게하면 그래프를 만드는 과정 (모델 선택)과 그래프를 평가하는 과정 (모델 피팅)이 더 잘 분리됩니다. 일반적으로 더 깨끗한 코드를 만듭니다. tf.Session은 with 블록 내에서 만들어 지므로 블록이 종료되면 자동으로 삭제됩니다.


이 코드를 자유롭게 실행하십시오. 2 만 건의 교육 반복 작업을 수행하며 프로세서에 따라 다소 시간이 걸릴 수 있습니다 (최대 30 분 소요).

cross_entropy = tf.reduce_mean(
    tf
.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv))
train_step
= tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
correct_prediction
= tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
accuracy
= tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

with tf.Session() as sess:
  sess
.run(tf.global_variables_initializer())
 
for i in range(20000):
    batch
= mnist.train.next_batch(50)
   
if i % 100 == 0:
      train_accuracy
= accuracy.eval(feed_dict={
          x
: batch[0], y_: batch[1], keep_prob: 1.0})
     
print('step %d, training accuracy %g' % (i, train_accuracy))
    train_step
.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})

 
print('test accuracy %g' % accuracy.eval(feed_dict={
      x
: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))

이 코드를 실행 한 후 최종 테스트 세트 정확도는 약 99.2 % 여야합니다.


우리는 TensorFlow를 사용하여 매우 정교한 심층 학습 모델을 빠르고 쉽게 작성, 교육 및 평가하는 방법을 배웠습니다.


1 :이 작은 컨볼 루션 네트워크의 경우 성능은 실제로 드롭 아웃 유무와 거의 동일합니다. 드롭 아웃은 종종 과잉을 줄이는 데 효과적이지만 매우 큰 신경 네트워크를 학습 할 때 가장 유용합니다.




+ Relu와 Dropout을 활용하여 심층 신경망을 연결하는 방법 및 히든레이어를 활용하여 서로 연결된 네트워크망을  구성하는 방법을 간단하게 나왔습니다. 추후의 CNN 을 참고하게 된다면 더 많은 레이어 구성 및 복잡하지만 단순하게 구성하는 방법의 튜토리얼이 나옵니다.


출처 : https://www.tensorflow.org/get_started/mnist/pros







튜토리얼은 따라 가겠는데... 전혀 감이 안잡힌다... 그래서 Get started 다음에 있는

프로그래머 가이드 부분에서부터 다시 시작하겠습니다.


Variables: Creation, Initialization, Saving, and Loading

변수 : 생성, 초기화, 저장 및로드

당신이 모델을 학습 할 때 보유 할 변수 및 업데이트 매개 변수를 사용합니다. 변수 텐서를 함유하는 버퍼 메모리에 있습니다.
명시 적으로 초기화해야하며 교육 도중 및 후에 디스크에 저장할 수 있습니다. 나중에 저장된 값을 복원하여 모델을 연습하거나 분석 할 수 있습니다.

이 문서는 다음 TensorFlow 클래스를 참조합니다. API에 대한 전체 설명은 참조 설명서 링크를 참조하십시오.

Creation (창조)

변수를 만들면 초기 값으로 Tensor를 Variable () 생성자에 전달합니다. TensorFlow는 상수 또는 임의 값에서 초기화에 자주 사용되는 텐서를 생성하는 연산 모음을 제공합니다.


이러한 모든 작업에는 텐서의 모양을 지정해야합니다. 그 모양은 자동으로 변수의 모양이됩니다.

변수는 일반적으로 고정 된 모양을 갖지만 TensorFlow는 변수를 변경하는 고급 메커니즘을 제공합니다.

# Create two variables.
weights
= tf.Variable(tf.random_normal([784, 200], stddev=0.35),
                      name
="weights")
biases
= tf.Variable(tf.zeros([200]), name="biases")

tf.Variable ()을 호출하면 그래프에 몇 가지 연산이 추가됩니다.

  • 변수 값을 보유하는 변수 op.
  • 변수를 초기 값으로 설정하는 이니셜 라이저 op. 이것은 실제로 tf.assign op입니다.
  • 예제의 biases 변수에 대한 0과 같은 초기 값에 대한 연산도 그래프에 추가됩니다.

tf.Variable () 값에 의해 반환되는 값은 Python 클래스 tf.Variable의 인스턴스입니다.

Device placement

변수는 with tf.device (...) : 블록을 사용하여 특정 장치가 생성 될 때 특정 장치에 고정 될 수 있습니다.

# Pin a variable to CPU.
with tf.device("/cpu:0"):
  v
= tf.Variable(...)

# Pin a variable to GPU.
with tf.device("/gpu:0"):
  v
= tf.Variable(...)

# Pin a variable to a particular parameter server task.
with tf.device("/job:ps/task:7"):
  v
= tf.Variable(...)

NOTE 

tf.Variable.assign 및 tf.train.Optimizer의 매개 변수 업데이트 작업과 같은 변수를 변경하는 작업은 변수와 동일한 장치에서 실행해야합니다. 호환되지 않는 장치 배치 지시문은 이러한 작업을 생성 할 때 무시됩니다.

장치 배치는 복제 된 설정에서 실행할 때 특히 중요합니다. 복제 된 모델의 장치 구성을 단순화 할 수있는 장치 기능에 대한 자세한 내용은 tf.train.replica_device_setter 를 참조하십시오.

Initialization(초기화)

변수 이니셜 라이저(초기화)는 모델의 다른 작업을 실행하기 전에 명시 적으로 실행해야합니다. 가장 쉬운 방법은 모든 변수 이니셜 라이저(초기화)를 실행하는 op를 추가하고 모델을 사용하기 전에 해당 op를 실행하는 것입니다.


또는 체크 포인트 파일에서 변수 값을 복원 할 수도 있습니다 (아래 참조).


변수 이니셜 라이저를 실행할 op를 추가하려면 tf.global_variables_initializer ()를 사용하십시오. 모델을 완전히 구성하고 세션에서 시작한 후에 만 ​​op를 실행하십시오.

# Create two variables.
weights
= tf.Variable(tf.random_normal([784, 200], stddev=0.35),
                      name
="weights")
biases
= tf.Variable(tf.zeros([200]), name="biases")
...
# Add an op to initialize the variables.
init_op
= tf.global_variables_initializer()

# Later, when launching the model
with tf.Session() as sess:
 
# Run the init operation.
  sess
.run(init_op)
 
...
 
# Use the model
 
...

Initialization from another Variable (다른 변수로부터의 초기화)

때때로 다른 변수의 초기 값에서 변수를 초기화해야합니다. tf.global_variables_initializer ()가 추가 한 연산은 모든 변수를 병렬로 초기화하므로 필요할 때 조심해야합니다.

다른 변수의 값에서 새 변수를 초기화하려면 다른 변수의 initialized_value () 속성을 사용하십시오. 초기화 된 값을 새 변수의 초기 값으로 직접 사용할 수도 있고 다른 변수로 사용하여 새 변수의 값을 계산할 수도 있습니다.

# Create a variable with a random value.
weights
= tf.Variable(tf.random_normal([784, 200], stddev=0.35),
                      name
="weights")
# Create another variable with the same value as 'weights'.
w2
= tf.Variable(weights.initialized_value(), name="w2")
# Create another variable with twice the value of 'weights'
w_twice
= tf.Variable(weights.initialized_value() * 2.0, name="w_twice")

Custom Initialization(사용자 정의 초기화)

편의 함수 tf.global_variables_initializer ()는 op를 추가하여 모델의 모든 변수를 초기화합니다. 변수의 명시적인 목록을 전달하여 tf.variables_initializer로 초기화 할 수도 있습니다. 변수가 초기화되었는지 확인하는 것을 포함하여 다른 옵션에 대해서는 변수 설명서( Variables Documentation)를 참조하십시오.

Saving and Restoring (저장 및 복원)

모델을 저장하고 복원하는 가장 쉬운 방법은 tf.train.Saver 객체를 사용하는 것입니다. 생성자는 그래프의 모든 변수 또는 지정된 목록의 그래프에 저장 및 복원 작업을 추가합니다. saver 객체는 이러한 ops를 실행하고 체크 포인트 파일에 대한 쓰기 또는 읽기 경로를 지정하는 메서드를 제공합니다.

그래프가없는 모델 체크 포인트를 복원하려면 먼저 메타 그래프 파일에서 그래프를 가져와야합니다 (일반적인 확장자는 .meta 임). 이것은 tf.train.import_meta_graph를 사용하여 수행됩니다.이 그래프는 복원을 수행 할 수있는 Saver를 반환합니다.

+meta 데이터 파일이 그래프라고 합니다.... 이제까지 pb가 그래프인줄 알고 있었는데... ㅎㅎㅎ 역시 기초가 탄탄해야 하는 것 같습니다.

Checkpoint Files

변수는 대개 변수 이름에서 텐서 값까지의 맵을 포함하는 바이너리 파일에 저장됩니다.

Saver 개체를 만들 때 검사 점 파일에서 변수의 이름을 선택적으로 선택할 수 있습니다. 기본적으로 각 변수에 대해 tf.Variable.name 속성 값을 사용합니다.

체크 포인트에있는 변수를 이해하려면 inspect_checkpoint 라이브러리, 특히 print_tensors_in_checkpoint_file 함수를 사용할 수 있습니다.

Saving Variables (변수 저장하기)

모델의 모든 변수를 관리하려면 tf.train.Saver ()를 사용하여 Saver를 작성하십시오.

# Create some variables.
v1
= tf.Variable(..., name="v1")
v2
= tf.Variable(..., name="v2")
...
# Add an op to initialize the variables.
init_op
= tf.global_variables_initializer()

# Add ops to save and restore all the variables.
saver
= tf.train.Saver()

# Later, launch the model, initialize the variables, do some work, save the
# variables to disk.
with tf.Session() as sess:
  sess
.run(init_op)
 
# Do some work with the model.
 
..
 
# Save the variables to disk.
  save_path
= saver.save(sess, "/tmp/model.ckpt")
 
print("Model saved in file: %s" % save_path)

Restoring Variables(변수 복원)

동일한 Saver 개체가 변수를 복원하는 데 사용됩니다. 파일에서 변수를 복원 할 때는 미리 변수를 초기화 할 필요가 없습니다.

# Create some variables.
v1
= tf.Variable(..., name="v1")
v2
= tf.Variable(..., name="v2")
...
# Add ops to save and restore all the variables.
saver
= tf.train.Saver()

# Later, launch the model, use the saver to restore variables from disk, and
# do some work with the model.
with tf.Session() as sess:
 
# Restore variables from disk.
  saver
.restore(sess, "/tmp/model.ckpt")
 
print("Model restored.")
 
# Do some work with the model
 
...

Choosing which Variables to Save and Restore (저장 및 복원 할 변수 선택)

tf.train.Saver ()에 인수를 전달하지 않으면 세이버는 그래프의 모든 변수를 처리합니다. 이들 각각은 변수가 생성 될 때 전달 된 이름으로 저장됩니다.

검사 점 파일에서 변수의 이름을 명시 적으로 지정하는 것이 유용한 경우가 있습니다. 예를 들어 "weights"라는 이름의 변수를 가진 모델을 교육했을 수도 있습니다.이 변수의 값은 "params"라는 새 변수에 복원하려는 값입니다.

또한 모델에 사용되는 변수의 하위 집합 만 저장하거나 복원하는 것이 유용한 경우도 있습니다. 예를 들어 5 개의 레이어가있는 신경망을 훈련했을 수 있습니다. 이제 6 개의 레이어로 새 모델을 학습하고 이전에 학습 된 모델의 5 개 레이어에서 새 모델의 처음 5 개 레이어로 매개 변수를 복원 할 수 있습니다.

tf.train.Saver () 생성자에 파이썬 사전을 전달하여 저장할 이름과 변수를 쉽게 지정할 수 있습니다. keys는 사용할 이름이고, value는 관리 할 변수입니다.

Notes:

- 모델 변수의 여러 하위 집합을 저장하고 복원해야하는 경우 원하는만큼의 보호기 개체를 만들 수 있습니다. 동일한 변수가 여러 세이버 객체에 나열 될 수 있으며 세이버 restore () 메소드가 실행될 때만 해당 값이 변경됩니다.

- 세션 시작시 모델 변수의 하위 집합 만 복원하는 경우 다른 변수에 대해 초기화 연산을 실행해야합니다. 자세한 정보는  tf.variables_initializer를 참조하십시오.

# Create some variables.
v1
= tf.Variable(..., name="v1")
v2
= tf.Variable(..., name="v2")
...
# Add ops to save and restore only 'v2' using the name "my_v2"
saver
= tf.train.Saver({"my_v2": v2})
# Use the saver object normally after that.
...




나는 안드로이드에 @Override 의 목적을 알고 싶어요.

1.


자바 주석을 @Override. 다음과 같은 방법을 다치게 컴파일러는 슈퍼 클래스의 메소드를 오버라이드 (override) 지시합니다. 예를 들어, 당신은 Person 클래스를 구현 말한다.

public class Person {
   public final String firstName;
   public final String lastName;

   //some methods

   @Override public boolean equals(Object other) {
      ...
   }
}

Person 클래스() 메소드가 있습니다. equals 메소드는 이미 사람의 슈퍼 클래스 객체에 정의되어 있습니다.

따라서 equlas 구현 () 명 public ()을 재정의한다. 즉,  (사람)를 재정의합니다.


명시적으로 재정의하지 않고 메서드를 재정의하는 것이 합법적입니다. 

따라서 @Override의 주석이 무엇을 의미합니까?

실수로 다음과 같은 방식으로 재정의하려고 하면 어떻게 됩니까?

public boolean equals(Person other) {
   ...
}

위의 경우에는 버그가 있다. 당신은 동등하게 재정의하려 했지만 당신은 그렇지 않았다.

왜요? () 같은 등식은 매개 변수를 매개 변수로 얻고 당신의 equals()을 매개 변수로 얻는다.


컴파일러가 당신이 오버 라이드 하고 싶어 하는 것을 알지 못했기 때문에 컴파일러는 당신에게 그 버그에 대해 알려 주지 않을 것이다.


컴파일러가 알 수 있는 한, 당신은 실제로 과부하를 의미한다. 


하지만 재정의를 사용하려고 시도한 경우에는 다음과 같은 항목을 사용합니다.

@Override public boolean equals(Person other) {
   ...
}

이제 컴파일러는 오류가 있다는 것을 알고 있다. 너는 무시하고 싶었지만 그렇지 않았다. 

따라서@재정의 주석을 사용하는 이유는 방법을 명시적으로 선언하는 것입니다.




2.

컴파일러가 super class에서 메서드를 재정의하도록 고안되었음을 컴파일러에게 알려 주는 자바 주석은 말할 것도 없다. 그것은 엄격히 필요하지는 않지만 컴파일 시 오류를 잡아내는 데 도움이 된다.


3.

@Override는 자바 스크립트입니다.

또한 슈퍼 클래스의 메소드 선언을 오버라이드 (override)하는 상처를 메소드 선언을 나타냅니다. 방법이 주석 형의 주석을 붙일 수 있지만, 슈퍼 클래스 메소드를 오버라이드 (override)하지 않는 경우, 컴파일러는 오류 메시지를 생성해야합니다.


Example:

class Parent{
    public void foo(){

    }
}

class Child extends Parent{
    //compile perfect !
    @override
    public void foo(){

    }
    //will show compile time error message here as it is not being overridden 
    @override
    public void foo(int i){

    }

}



출처 : https://stackoverflow.com/questions/4736212/meaning-of-android-override

이 게시글은 기계 학습과 기계 학습 모두에 새롭게 등장하는 독자를 위한 것입니다.


MNIST가 무엇인지 이미 알고 있다면 softmax( multinomial logistic)회귀이 무엇인지를 알 수 있으며, 이는 보다 빠른 속도의 자습서를 선호할 수 있습니다.


튜토리얼을 시작하기 전에 반드시 TensorFlow를 설치해야 합니다.


프로그래밍하는 법을 배울 때,"HelloWorld"는 "HelloWorld"를 인쇄하는 것과 같은 전통을 가지고 있습니다. 프로그래밍이 HelloWorld를 하는 것은 이번 튜토리얼과 같은 문맥입니다.


MNIST는 간단한 컴퓨터 비전 데이터 세트입니다. 이는 다음과 같이 손으로 작성한 숫자의 이미지로 구성됩니다.


또한 각 이미지에 대한 라벨이 포함되어 있으며, 각 이미지에 해당하는 숫자를 알려 줍니다.

 예를 들어 위 이미지의 레이블은 5,0,4,1입니다.


이 튜토리얼에서, 우리는 이미지를 관찰하고 그들이 어떤 숫자인지 예측할 수 있도록 모델을 훈련시킬 것입니다.

우리의 목표는 최첨단 성능을 발휘하는 정교한 모델을 훈련시키는 것이 아니라, 나중에 할 수 있도록 코드를 부여하는 것입니다!--하지만 발가락을 사용하여 발가락 부분을 찍는 것이 낫다. 

이와 같이 우리는 매우 단순한 모델로 시작할 것입니다. 바로 Softmax 회귀라는 회귀 모델입니다.


+ 즉, 나중에 훈련시킨 모델들을 가져오는 원리들을 파악 및 softmax 회귀 모델을 알아가는 부분인 것 같습니다.


이 튜토리얼의 실제 코드는 매우 짧으며, 모든 재미 있는 것들은 세줄로 되어 있습니다.하지만, 그것 이면의 아이디어들을 이해하는 것은 매우 중요하다.이것 때문에, 우리는 매우 신중하게 코드를 완성할 것입니다.


본 자습서는 mnist_softmax.py 라인 코드에서 발생하는 일련의 설명, 라인별로 설명합니다.


본 자습서는 다음을 비롯하여 몇가지 다른 방법으로 사용할 수 있습니다.

1) 각 줄의 설명을 통해 읽을 수 있는 대로 각 코드를 라인별로 구분하여 라인 업으로 복사하고 붙여 넣으십시오.

2) 설명서를 읽기 전에 전체 mnist_softmax.py Python 파일을 실행하고 이 자습서를 사용하여 명확하지 않은 코드를 이해할 수 있도록 합니다.


수행할 내용:

1)데이터 중복 제거 기술에 대한 자세한 내용 및 데이터 중복 제거 기술에 대해 알아보기.

2)이미지의 모든 픽셀을 보는 데 기반하여 자릿수를 인식하는 기능을 생성합니다.

3)TensorFlow를 사용하여 모델을 " 보기"로 인식하여 모델을 식별하고, 수천개의 예제를 실행할 수 있도록 합니다.

4)테스트 데이터를 통해 모델의 정확도를 점검하십시오.

The MNIST Data

MNIST 데이터는 Yann LeCun의 웹 사이트에서 호스팅 됩니다.

이 자습서에서 코드를 복사하고 붙여 넣는 경우, 여기서 데이터를 자동으로 다운로드하고 읽을 수 있는 코드 두줄로 시작하십시오.

from tensorflow.examples.tutorials.mnist import input_data
mnist
= input_data.read_data_sets("MNIST_data/", one_hot=True)

MNIST 데이터는 세 부분으로 나뉩니다. 즉, 교육 데이터의 55,000개의 데이터 포인트( mnist.train), 테스트 데이터의 10,000포인트( mnist.test), 검증 데이터의 5,000포인트( mnist.validation)등이 있습니다.

이 세분류는 매우 중요합니다. 우리가 배워야 할 것은 우리가 배우지 못한 것을 확실히 할 수 있는 별개의 데이터를 가지고 있다는 것입니다.


앞서 언급한 바와 같이, 모든 MNIST 데이터 포인트에는 두개의 파트가 있습니다. 즉, 손으로 작성한 숫자와 해당 라벨의 이미지입니다.

우리는 이미지"x"와 라벨"y"를 부를 것입니다. 교육 세트 및 테스트 세트에는 이미지 및 해당 라벨이 모두 포함되어 있습니다. 예를 들어 교육용 이미지는 mnist.train.images이며, 교육용 레이블은 mnist.train.labels.입니다.


각 이미지는 28픽셀 x28픽셀입니다. NAT은 다음과 같은 다양한 수치로 해석할 수 있습니다.


우리는 이 배열을 28x28의 벡터의 벡터로 평평하게 만들 수 있다. 우리가 이미지들 사이에 일관성을 유지하는 한, 우리가 어떻게 배열할지는 중요하지 않습니다.

이러한 관점에서 볼 때, MNIST 이미지는 매우 풍부한 구조(경고:시각화 집약적 시각화)를 가진 벡터 기반 벡터 공간의 수많은 포인트일 뿐입니다.


평평한 데이터에서 이미지의 2D구조에 대한 정보가 삭제됩니다. 최고의 컴퓨터 비전 방법은 이 구조를 이용하는 거죠. 그리고 우리는 나중에 튜토리얼을 쓸 것입니다. 그러나 우리가 여기서 사용할 간단한 방법은 다음과 같습니다.


결과적으로 mnist.train.images는 55000( n-dimensional, 784, ])의 텐서이다. 첫번째 차원은 영상 목록에 있는 색인이며 두번째 차원은 각 영상의 각 픽셀에 대한 인덱스입니다.텐서( tensor)의 각 항목은 특정 영상의 특정 화소에 대해 0과 1사이의 화소 강도이다.

각 그림 MNIST의 각 이미지에는 해당 이미지에 그려진 숫자를 나타내는 0~9사이의 숫자가 있습니다.


본 자습서를 위해 저희는 라벨을 "one-hot 벡터"라고 부르고자 합니다. 벡터 기반 벡터는 대부분의 차원에서 0이며, 단일 차원의 1차원이다. 이 경우 n번째 숫자는 n번째 치수의 1개의 벡터로 표현됩니다.예를 들어, 3은[0,0,0,0,0,0,0,0,0,0]입니다. 결과적으로 mnist.train.labels는[ 55000,10]kg의 부동 소수 점 배열이다.

우리는 이제 실제로 모델을 만들 준비가 됐어요!


Softmax Regressions

파이썬을 사용하여 효율적인 숫자 계산을 하기 위해서, 우리는 보통 Python곱셈기와 같은 비싼 작업을 하는 NumPy 같은 라이버리을 사용한다. 다른 언어로 구현된 매우 효율적인 코드이다.

불행히도, 모든 운영 체제로 전환하는 데는 여전히 많은 오버 헤드가 존재할 수 있습니다.

이 오버 헤드는 특히 데이터 전송에 높은 비용이 들 수 있는 분산된 방식이나 분산된 방식으로 계산하려는 경우에 특히 나쁩니다.


TensorFlow는 또한 Python을 없애기 위해 많은 노력을 하지만, 이러한 오버 헤드를 피하기 위해 한 걸음 더 나아 간다.

Python은 파이썬을 사용하여 독립적으로 운영하는 것을 대신하는 대신에 파이선을 사용하여 운영되는 상호 작용 작업의 그래프에 대해 설명합니다.(이와 같은 접근 방식은 몇개의 기계 학습 라이브러리에서 볼 수 있습니다.)


TensorFlow를 사용하려면 먼저 가져와야 합니다.

import tensorflow as tf
import tensorflow as tf

우리는 상징적 변수를 조작하여 이러한 상호 작용 운영을 설명한다. 다음을 생성합니다.

x = tf.placeholder(tf.float32, [None, 784])

x는 특정한 가치가 아니다. 이것은 자리 표시자입니다. 우리가 계산대에서 계산할 때 우리가 입력할 가치가 있는 값입니다.

우리는 각각의 MNIST 이미지들을 784-dimensional 벡터로 바꿀 수 있는 숫자를 입력할 수 있기를 원합니다.

우리는 이것을 부동 소수 점 이하의 부동 소수 점 숫자의 2차원 텐서( 784)로 표현한다. (여기서는 치수가 어떤 길이라도 될 수 있음을 의미한다.)

우리는 또한 모델에 대한 체중(Weights)과 편견(Biases)이 필요합니다. 우리는 이것들을 추가 투입하는 것을 상상할 수 있지만, TensorFlow는 그것을 다루는 더 나은 방법을 가지고 있습니다. Variable

Variable는 상호 작용의 상호 작용에 대한 TensorFlow의 그래프에서 수정 가능한 수정 가능한 텐서이다.

그것은 계산에 의해 사용되고 심지어 수정될 수도 있다. 기계 학습 애플리케이션의 경우 일반적으로 모델 매개 변수는 변수 변수가 됩니다.

W = tf.Variable(tf.zeros([784, 10]))
b
= tf.Variable(tf.zeros([10]))

우리는 변수의 초기 값을 tf.Variable의 초기 값으로 줌으로써 이 변수를 생성합니다. 이 경우에는 W과 b을 tf.zeros 0으로 나눕니다.

우리는 W와 b를 배울 것이기 때문에, 그것들이 처음에는 그다지 중요하지 않다.


W는[ 784,10]의 형태를 가지고 있습니다. 왜냐하면 우리는 벡터의 벡터 벡터를 곱하기 위해 다른 등급의 벡터 벡터를 생성하기 위해 벡터 벡터를 곱하고 싶습니다.b는 출력에 추가할 수 있도록[10]의 모양을 가지고 있다.

이제 모델을 구현할 수 있습니다. 그것을 정의하는데 한줄만 걸려요!

y = tf.nn.softmax(tf.matmul(x, W) + b)

첫째로, 우리는 x, W, W의 표현으로 x를 곱합니다.

이것은 우리가 곱셈 부호를 가지고 있는 우리의 방정식으로, 우리가 여러개의 입력을 가진 2D텐서를 다루는 작은 속임수로 우리의 방정식에 넣은 것에서 힌트를 얻었다.

그리고 나서 우리는 b를 추가하고, 마침내 tf.nn.softmax.를 적용한다.

바로 그거에요. 몇번의 짧은 설치 후에 모델을 정의할 수 있는 선이 하나밖에 없었습니다.

그것은 TensorFlow가 특별히 쉽게 회귀할 수 있도록 설계되었기 때문이 아니다.

그것은 기계 학습 모델에서부터 물리학 시뮬레이션에 이르기까지 많은 숫자의 수치 연산을 묘사하는 매우 유연한 방법입니다.

그리고 일단 정의된 대로, 우리의 모델은 컴퓨터의 CPU, GPUs, 심지어는 심지어 전화기로도 작동할 수 있습니다!

Training

모델을 훈련시키기 위해서, 우리는 모델이 좋은 것이 무엇인지를 의미하는 것을 정의해야 합니다.

실제로, 기계 학습에서는 전형적으로 모델이 나쁘다는 것을 의미합니다.

우리는 이것을 원가 혹은 손실이라 부르며, 그것은 우리의 모델이 원하는 결과로부터 얼마나 멀리 떨어져 있는지를 나타냅니다.

우리는 에러를 최소화하려고 합니다. 에러 마진이 적을수록 우리의 모델은 더 좋습니다.

모델의 분실을 결정하기 위한 매우 일반적이고 매우 훌륭한 기능은 "cross-entropy"라고 불립니다.

정보 이론은 정보 이론에서 정보 압축 코드에 대해 생각하는 것에서 기인하지만, 도박에서부터 기계 학습에 이르기까지 많은 분야에서 중요한 아이디어가 된다. 다음과 같이 정의됩니다.


여기서 y는 예측 가능한 확률 분포이며 y ′는 실제 분포(자릿수 라벨을 사용한 one-hot 벡터)이다.

대략적으로, cross-entropy는 우리의 예측이 진실을 설명하는 데 얼마나 비효율적인지를 측정하고 있다.

cross-entropy에 대한 자세한 내용은 본 자습서의 범위를 벗어나지만 이해할 만한 가치가 충분히 있습니다.


cross-entropy를 구현하려면 먼저 새 자리 표시자를 추가하여 올바른 답을 입력해야 합니다.

y_ = tf.placeholder(tf.float32, [None, 10])

우리는 cross-entropy 기능을 구현할 수 있다. ylog(y):

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))

첫째, tf.log는 y의 각 요소의 대수를 계산한다. 다음으로 y-y의 원소를 곱하고 y^y(y)와 같은 원소를 곱한다.

그런 다음 tf.reduce_sum는 reduction_indices=[1 매개 변수로 인해 y의 두번째 치수에 해당하는 요소를 추가합니다.

마지막으로, tf.reduce_mean는 배치의 모든 예제에 대한 평균을 계산합니다.


소스 코드에서는 이 공식을 사용하지 않습니다. 숫자가 불안정하기 때문입니다. 그 대신에 unnormalized(x, W)+b(x, W)에 softmax_cross_entropy_with_logits를 tf.nn.softmax_cross_entropy_with_logits에 적용한다.

이는 보다 수치적으로 안정적인 기능을 통해 내부적으로 softmax 활성화를 계산합니다. 코드를 사용하는 경우 대신 tf.nn.softmax_cross_entropy_with_logits를 사용하는 것을 고려해 보십시오.


이제 우리가 원하는 것이 무엇인지 알 수 있으므로, 우리가 그것을 하기 위해 TensorFlow를 훈련시키는 것은 매우 쉬워요.

왜냐하면 TensorFlow는 당신의 계산의 전체 그래프를 알고 있기 때문입니다. 자동화 알고리즘을 사용하여 변수가 손실되는 손실에 어떻게 영향을 미치는지 효율적으로 결정할 수 있습니다.

그런 다음 최적화 알고리즘을 적용하여 변수를 수정하고 손실을 줄일 수 있습니다.

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

이 경우에, 우리는 TensorFlow에게 0.5의 학습 속도로 구배 하강 알고리즘을 사용하여 cross_entropy를 최소화할 것을 요청한다.경사 하강은 간단한 절차입니다. 여기서 TensorFlow는 단순히 각 변수를 비용을 감소시키는 방향으로 조금씩 돌립니다. 하지만 TensorFlow는 여러가지 다른 최적화 알고리즘을 제공합니다. 만약 한개만 한다면 하나의 선을 조정하는 것만큼 간단합니다.


TensorFlow가 실제로 여기서 수행하는 것은 backpropagation와 경사도 하강을 구현하는 그래프에 새로운 연산을 추가하는 것입니다. 그런 다음, 단일 작업을 수행합니다. 단, 작동 시 기울기 하강 훈련을 수행하여 변수를 약간 수정하고 손실을 줄입니다.


이제 InteractiveSession에서 모델을 시작할 수 있습니다.

sess = tf.InteractiveSession()

먼저 생성한 변수를 초기화하기 위한 작업을 생성해야 합니다.

tf.global_variables_initializer().run()

훈련을 시작합시다--훈련 스텝은 1000번입니다!

for _ in range(1000):
  batch_xs
, batch_ys = mnist.train.next_batch(100)
  sess
.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

각 단계마다 100개의 무작위 데이터 포인트가 배치되어 있습니다. 교육 세트에서 백개의 랜덤 데이터 포인트를 얻을 수 있습니다. 우리는 배치 데이터에서 자리 표시자를 대체하기 위해 train_step 데이터를 실행한다.


무작위 데이터의 소량 배치를 확률적 훈련이라 부르며 이 경우 확률적 경사 하강 하강이다. 이상적으로는, 우리는 모든 훈련 과정을 위해 모든 데이터를 사용하고 싶습니다. 왜냐하면 우리는 우리가 해야 할 일을 더 잘 이해할 수 있기 때문입니다. 하지만 그것은 비쌉니다. 따라서, 우리는 매번마다 다른 하위 집합을 사용합니다. 이것을 하는 것은 싸고 이로운 점도 많다.

Evaluating Our Model

우리의 모델은 얼마나 잘 되나요?

글쎄요, 우선 정확한 라벨을 어디에 뒀는지 알아냅시다. tf.argmax는 어떤 축을 따라 가장 높은 진입률의 지수를 나타내는 매우 유용한 기능이다. 예를 들어, tf.argmax(y, 1)은 각 입력에 대해 가장 가능성이 높은 라벨이며, tf.argmax(y_, 1)은 정확한 라벨로 표시된다. 우리는 우리의 예측이 진실과 일치하는지를 확인하기 위해 tf.equal를 사용할 수 있다.

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))

그것은 우리에게 booleans 리스트를 제공한다. 정확한 비율을 결정하기 위해, 우리는 부동 소수 점 숫자를 선택한 다음 평균을 취한다. 예를 들어,[True, False, True, True]는 0.75가 될[1,0,1,1]이 됩니다.

accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

마지막으로, 우리는 우리의 시험 데이타에 대한 정확성을 요구한다.

print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

이는 약 92%여야 합니다.

good ? 어떤가요? 글쎄, 그렇진 않아. 사실, 그것은 꽤나 나빠요. 이것은 우리가 매우 단순한 모델을 사용하고 있기 때문입니다.

약간의 깊이를 가지고 있으면 97%까지 갈 수 있어요. 최고의 모델들은 99.7%이상의 정확도를 달성할 수 있습니다! ( 자세한 내용은 이 결과 목록을 참조하십시오.)


중요한 것은 우리가 이 모델에서 배운 것입니다. 그럼에도 불구하고, 만약 여러분이 이러한 결과에 대해 조금 더 우울하다면, 우리가 훨씬 더 잘하는 다음 튜토리얼을 통해 더 정교한 모델을 만드는 방법을 배워 보세요!



출처 : https://www.tensorflow.org/get_started/mnist/beginners


추후 다음 튜토리얼을 하기 전에 실제 돌린 장면을 포함해서 올리도록 하겠습니다.


Windows10에서 사용자 프로필 폴더의 이름을 변경하는 방법 (C:\Users\Username)


윈도우에서 사용자들이 종종 C : \ Users의 프로필 폴더 이름을 바꾸는 방법을 묻습니다.

혹은 회사에서 사원이 바뀌었을 떄, 계정은 바꾸어서 주었지만,

실제 C드라이브 사용자 폴더에는 기존 사용자의 이름이 적혀있는 경우가 있습니다.


How to rename the user account profile folder in Windows 10

이 방법은 Windows10(윈도우 10):홈, Pro또는 EnterpriseEdition과 연동되지만 시스템에 손상을 입힐 수 있습니다.

따라서, 이 방법을 시도하기 전에 전체 시스템 백업을 생성해야 합니다.


제가 해본 경험상... 바로가기 파일들 빼고는 정상작동 되었습니다... 


변경 방법을 알려드리겠습니다. 



1. 다른 관리자 계정이 있는지 확인하십시오. 이렇게 하지 않으면 관리자(administrator)라는 내장형 사용자를 임시로 활성화할 수 있습니다.


윈도우 키 -> cmd -> 명령프로토콜 (오른쪽 클릭) -> 해당 폴더 열기 ->

 명령 프로토콜 (오른쪽 클릭) -> 관리자 권한으로 실행



명령창에 아래 명령어 실행.

net user administrator /active:yes


영어 및 한국어가 아닌 버전의 Windows 10을 사용하는 경우 관리자 계정 이름이 달라집니다. 예를 들어 프랑스어 버전의 경우 기본 제공 관리 계정의 사용자 이름은 "Administradur"이며 스페인어 인 "Administrador"입니다. 따라서 정확한 사용자 이름을 지정해야합니다. 그렇지 않으면 "사용자 이름을 찾을 수 없습니다"라는 오류 메시지가 나타납니다! 올바른 사용자 이름을 찾으려면 명령 줄 창에서 net user를 입력하고 Enter 키를 누릅니다.


2. PC 사용자 로그아웃을 하거나 PC를 재부팅합니다.


3 다른 계정에 로그인: Administrator

별도의 비밀번호 없이 로그인이 됩니다.


4.사용자 폴더(기본 값으로 C:\Users)로 이동하여 사용자 폴더의 이름을 원하는 대로 변경합니다.



5. 레지스트리 편집기 시작:

(윈도우 키 + R ) -> regedit -> OK


HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\

방금 이름을 변경한 프로파일과 관련된 키를 찾은 다음 ProfileImagePath 값을 찾아 새 경로의 이름을 변경합니다.



6. 추가 단계. 경로를 프로파일로 변경 한 후에 오류가 발생하면 수행하십시오. 

레지스트리에서 '이전 계정 이름'을 검색하십시오. 이전 경로로 값을 찾으면 새로운 값으로 변경하십시오.

이전 경로가 포함 된 모든 항목을 수정할 때까지 레지스트리 편집기에서 "F3"키를 누르십시오.


7. 다시 원래의 계정으로 로그인해서 1번의 항목을 반복합니다.

net user administrator /active:no




참조 및 출처 

http://tunecomp.net/rename-user-profile-folder-in-windows-10-c-users/



+ Recent posts