tensorflow 실전 독학 [2]
14036 단어 독학Tensorflow
자체 인 코더 (autoencoder): 무 감독 학습 알고리즘 으로 주로 데이터 의 차원 을 낮 추거 나 특징 을 추출 하 는 데 사용 된다.깊이 있 는 학습 에서 autoencoder 는 훈련 이 시작 되 기 전에 가중치 행렬 의 초기 값 을 제공 할 수 있 습 니 다.Xaiver Glorot 와 Yoshua Bengio 는 한 논문 에서 깊이 있 는 학습 모델 의 가중치 초기 화가 너무 작 으 면 신 호 는 각 층 간 에 전달 할 때 점점 축소 되 어 작용 하기 어렵 고 가중치 가 너무 크 면 각 층 간 에 전달 할 때 점점 확대 되 고 발산 과 실 효 를 초래 할 것 이 라 고 지적 했다.Xaiver 초기 화 기 는 가중치 행렬 을 크게 초기 화 하 는 것 이 적당 하 다.수학의 측면 에서 볼 때 Xaiver 는 가중치 가 0 의 평균 값 을 만족 시 키 는 동시에 방 차 는 2n i n + n o u t \ \ frac {2} {n {in} + n {out} nin + nout 2 이 고 분 포 는 고 르 게 분포 하거나 고 스 로 분포 할 수 있 습 니 다.
실현 은 주로 다음 과 같은 몇 가지 부분 을 포함한다.
1. 표준 의 균일 한 분 포 를 실현 하 는 Xaiver 초기 화 기: xavierinit(fan_in,fan_out,constant=1)
def xavier_init(fan_in,fan_out,constant=1):
#fan_in fan_out , Wights
# 0 , 2/(fan_in+fan_out)
low=-constant*np.sqrt(6.0/(fan_in+fan_out))
high=constant*np.sqrt(6.0/(fan_in+fan_out))
return tf.random_uniform((fan_in,fan_out),minval=low,\
maxval=high,dtype=tf.float32)
2. 노 이 즈 인 코딩 을 정의 하 는 class: AdditiveGaussianNoiseAutocoder (object)
class AdditiveGaussianNoiseAutocoder(object):
# class
def __init__(self,n_input,n_hidden,\
transfer_function=tf.nn.softplus,\
optimizer=tf.train.AdamOptimizer(),scale=0.1):
self.n_input=n_input#
self.n_hidden=n_hidden#
self.transfer=transfer_function#
self.scale=tf.placeholder(tf.float32)#
self.training_scale=scale#
network_weights=self._initialize_weights()
self.weights=network_weights
self.x=tf.placeholder(tf.float32,[None,self.n_input])#
self.hidden=self.transfer(tf.add(tf.matmul(\
self.x+scale*tf.random_normal((n_input,)),\
self.weights['w1']),self.weights['b1']))#
self.reconstruction=tf.add(tf.matmul(\
self.hidden,self.weights['w2']),\
self.weights['b2'])#
self.cost=0.5*tf.reduce_sum(tf.pow(tf.subtract(\
self.reconstruction,self.x),2.0))#
self.optimizer=optimizer.minimize(self.cost)# self.cost
init=tf.global_variables_initializer()
self.sess=tf.Session()
self.sess.run(init)#
def _initialize_weights(self):#
all_weights=dict()
all_weights['w1']=tf.Variable(xavier_init(self.n_input,\
self.n_hidden))
all_weights['b1']=tf.Variable(tf.zeros([self.n_hidden],\
dtype=tf.float32))
all_weights['w2']=tf.Variable(tf.zeros([self.n_hidden,\
self.n_input],dtype=tf.float32))
all_weights['b2']=tf.Variable(tf.zeros([self.n_input],\
dtype=tf.float32))
return all_weights
def partial_fit(self,X):#
cost,opt=self.sess.run((self.cost,self.optimizer),\
feed_dict={self.x:X,self.scale:self.training_scale})
return cost
def calc_total_cost(self,X):# cost ,
return self.sess.run(self.cost,feed_dict={self.x:X,\
self.scale:self.training_scale})
def transform(self,X):#
return self.sess.run(self.hidden,feed_dict={self.x:X,\
self.scale:self.training_scale})
def generate(self,hidden=None):#
if hidden is None:
hidden=np.random.normal(size=self.weights['b1'])
return self.sess.run(self.reconstruction,\
feed_dict={self.hidden:hidden})
def reconstruct(self,X):# , transform generate
return self.sess.run(self.reconstruction,feed_dict={self.x:X,\
self.scale:self.training_scale})
def getWeight(self):# w1
return self.sess.run(self.weights['w1'])
def getBiases(self):# b1
return self.sess.run(self.weights['b1'])
3. 훈련 집 을 표준화 처리 하 는 함수 정의: standardscale(X_train,X_test)
def standard_scale(X_train,X_test):#
preprocessor=prep.StandardScaler().fit(X_train)
X_train=preprocessor.transform(X_train)
X_test=preprocessor.transform(X_test)
return X_train,X_test
4. 표본 추출 방식 으로 batch 무 작위 추출size 크기 의 Block: getrandom_block_from_data(data,batch_size)
def get_random_block_from_data(data,batch_size):
# 0 len(data)-batch_size ,
# block , batch_size
# ,
start_index=np.random.randint(0,len(data)-batch_size)
return data[start_index:(start_index+batch_size)]
전체 코드
# -*- coding: utf-8 -*-
"""
Created on Mon Jul 22 10:11:34 2019
@author: Administrator
"""
import numpy as np
import sklearn.preprocessing as prep
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import ssl
def xavier_init(fan_in,fan_out,constant=1):
#fan_in fan_out , Wights
# 0 , 2/(fan_in+fan_out)
low=-constant*np.sqrt(6.0/(fan_in+fan_out))
high=constant*np.sqrt(6.0/(fan_in+fan_out))
return tf.random_uniform((fan_in,fan_out),minval=low,\
maxval=high,dtype=tf.float32)
class AdditiveGaussianNoiseAutocoder(object):
# class
def __init__(self,n_input,n_hidden,\
transfer_function=tf.nn.softplus,\
optimizer=tf.train.AdamOptimizer(),scale=0.1):
self.n_input=n_input#
self.n_hidden=n_hidden#
self.transfer=transfer_function#
self.scale=tf.placeholder(tf.float32)#
self.training_scale=scale#
network_weights=self._initialize_weights()
self.weights=network_weights
self.x=tf.placeholder(tf.float32,[None,self.n_input])#
# ,scale*tf.random_normal((n_input,))
self.hidden=self.transfer(tf.add(tf.matmul(\
self.x+scale*tf.random_normal((n_input,)),\
self.weights['w1']),self.weights['b1']))
self.reconstruction=tf.add(tf.matmul(\
self.hidden,self.weights['w2']),\
self.weights['b2'])#
self.cost=0.5*tf.reduce_sum(tf.pow(tf.subtract(\
self.reconstruction,self.x),2.0))#
self.optimizer=optimizer.minimize(self.cost)# self.cost
init=tf.global_variables_initializer()
self.sess=tf.Session()
self.sess.run(init)#
def _initialize_weights(self):#
all_weights=dict()
all_weights['w1']=tf.Variable(xavier_init(self.n_input,\
self.n_hidden))
all_weights['b1']=tf.Variable(tf.zeros([self.n_hidden],\
dtype=tf.float32))
all_weights['w2']=tf.Variable(tf.zeros([self.n_hidden,\
self.n_input],dtype=tf.float32))
all_weights['b2']=tf.Variable(tf.zeros([self.n_input],\
dtype=tf.float32))
return all_weights
def partial_fit(self,X):#
cost,opt=self.sess.run((self.cost,self.optimizer),\
feed_dict={self.x:X,self.scale:self.training_scale})
return cost
def calc_total_cost(self,X):# cost ,
return self.sess.run(self.cost,feed_dict={self.x:X,\
self.scale:self.training_scale})
def transform(self,X):#
return self.sess.run(self.hidden,feed_dict={self.x:X,\
self.scale:self.training_scale})
def generate(self,hidden=None):#
if hidden is None:
hidden=np.random.normal(size=self.weights['b1'])
return self.sess.run(self.reconstruction,\
feed_dict={self.hidden:hidden})
def reconstruct(self,X):# , transform generate
return self.sess.run(self.reconstruction,feed_dict={self.x:X,\
self.scale:self.training_scale})
def getWeight(self):# w1
return self.sess.run(self.weights['w1'])
def getBiases(self):# b1
return self.sess.run(self.weights['b1'])
ssl._create_default_https_context = ssl._create_unverified_context
mnist=input_data.read_data_sets('MNIST_data',one_hot=True)
def standard_scale(X_train,X_test):#
preprocessor=prep.StandardScaler().fit(X_train)
X_train=preprocessor.transform(X_train)
X_test=preprocessor.transform(X_test)
return X_train,X_test
def get_random_block_from_data(data,batch_size):
# 0 len(data)-batch_size ,
# block , batch_size
# ,
start_index=np.random.randint(0,len(data)-batch_size)
return data[start_index:(start_index+batch_size)]
X_train,X_test=standard_scale(mnist.train.images,mnist.test.images)
n_samples=int(mnist.train.num_examples)#
training_epochs=20#
batch_size=128
display_step=1# display_step cost
autoencoder=AdditiveGaussianNoiseAutocoder(n_input=784,\
n_hidden=200,\
transfer_function=tf.nn.softplus,\
optimizer=tf.train.AdamOptimizer(learning_rate=0.001),\
scale=0.01)
for epoch in range(training_epochs):
avg_cost=0
total_batch=int(n_samples/batch_size)
for i in range(total_batch):
batch_xs=get_random_block_from_data(X_train,batch_size)
cost=autoencoder.partial_fit(batch_xs)
avg_cost+=cost/n_samples*batch_size
if epoch %display_step==0:
print('Epoch','%04d'%(epoch+1),\
'cost=','{:.9f}'.format(avg_cost))
부분 함수 주석
tf.random_uniform(shape,minval=0,maxval=None,dtype=tf.float32,seed=None,name=None)
균일 분포 에서 무 작위 값 을 출력 합 니 다.생 성 된 값 은 이 [minval, maxval) 범위 내 에서 균일 한 분 포 를 따 릅 니 다. 하한 minval 은 범위 내 에 포함 되 어 있 으 며, 상한 maxval 은 제외 되 어 있 습 니 다. 부동 소수점 에 대해 기본 범 위 는?[0, 1). 정수 에 대해 서 는 최소한 maxval 이 명확 하 게 지정 되 어야 합 니 다. 정수 상황 에서 무 작위 정 수 는 maxval - minval 이 2 의 정확 한 멱 을 제외 하고 약간 오차 가 있 습 니 다. maxval - minval 의 값 에 대해 서 는 편차 가 적 습 니 다. shape: 1 차원 정수 장 량 또는 Python 배열, 출력 장 량 의 형태 입 니 다. minval: dtype 형식의 0 차원 장 량 또는 Python 값, 생 성 된 무 작위 값 범위 의 하한 선 입 니 다. 묵.0. maxval: dtype 형식의 0 차원 장 량 이나 Python 값 이 라 고 생각 합 니 다. 생 성 할 무 작위 값 범위 의 상한 선 입 니 다. dtype 이 부동 소수점 이 라면 기본 값 은 1 입 니 다. dtype: 출력 유형: float 16, float 32, float 64, int 32, orint 64. seed: Python 정수 입 니 다. 분포 에 무 작위 피 드 를 만 드 는 데 사 용 됩 니 다. name: 작업 이름 (선택 가능).
# -*- coding: utf-8 -*-
"""
Created on Mon Jul 22 12:35:21 2019
@author: Administrator
"""
import tensorflow as tf
A=tf.random_uniform(shape=(4,1),minval=0,maxval=None,\
dtype=tf.float32,seed=None,name=None)
B=tf.random_uniform(shape=(3,3),minval=0,maxval=None,\
dtype=tf.float32,seed=None,name=None)
C=tf.random_uniform(shape=(1,5),minval=0,maxval=23,\
dtype=tf.int32,seed=None,name=None)
print('A:',A.eval())
print('B:',B.eval())
print('C:',C.eval())
# :
#A: [[0.02448559]
# [0.7221812 ]
# [0.15603411]
# [0.4908315 ]]
#B: [[0.45691633 0.8306242 0.24430227]
# [0.90618944 0.23485541 0.00950408]
# [0.51974654 0.51217234 0.6660249 ]]
#C: [[22 18 2 14 3]]
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
함 수 는 지 정 된 정적 분포 수치 에서 지 정 된 개수 의 값 을 꺼 내 는 데 사 용 됩 니 다. shape: 출력 장 량 의 모양, 필수 입 니 다. mean: 정적 분포 의 평균 값, 기본 값 은 0 입 니 다. stddev: 정적 분포 의 표준 차, 기본 값 은 1.0 입 니 다. dtype: 출력 유형, 기본 값 은 tf. float 32 입 니 다. seed: 랜 덤 피 드 는 하나의 정수 입 니 다. 설정 후 매번 생 성 되 는 랜 덤 수 입 니 다.모두 같 습 니 다. name: 작업 의 이름 입 니 다.
# -*- coding: utf-8 -*-
"""
Created on Mon Jul 22 12:35:21 2019
@author: Administrator
"""
import tensorflow as tf
A=tf.random_normal(shape=(3,2), mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
print(A.eval())
#
#array([[-0.3779934 , 0.5889418 ],
# [-0.08279686, -0.21108189],
# [-0.06789723, 0.87856984]], dtype=float32)
sklearn.preprocessing.Standardscaler
데 이 터 를 기한 내 속성 (열 별로 진행) 에서 평균 값 을 빼 고 방 차 로 나 누 었 습 니 다. 결 과 는 각 속성 / 열 마다 모든 데 이 터 를 0 근처에 모 으 고 방 차 는 1 입 니 다. sklearn. preprocessing. Standardscaler. fit (X train) 을 사용 하면 X train 을 직접 훈련 하고 관련 파 라 메 터 를 보존 하 며 대상 을 직접 사용 하여 테스트 집합 데 이 터 를 변환 할 수 있 습 니 다.
preprocessor=sklearn.preprocessing.Standardscaler.fit(X_train)
X_train=preprocessor.transform(X_train)
X_test=preprocessor.transform(X_test)
numpy.random.randint(low, high=None, size=None, dtype=‘l’)
함수 의 역할 은 분 산 된 고 르 게 분 포 된 정 수 를 만 드 는 것 입 니 다. 범 위 는 낮은 (포함) 에서 높 은 (포함 하지 않 음), 즉 [low, high) 입 니 다. 매개 변수 high 의 값 을 쓰 지 않 으 면 [0, low) 의 값 을 되 돌려 줍 니 다. low: int; 생 성 된 수 치 는 최소 low 보다 커 야 합 니 다. (hign = None 시 생 성 된 수 치 는 [0, low) 구간 내 에 있어 야 합 니 다. high: int (선택 가능); 이 값 을 사용 하면 생 성 된 수 치 는 [low, high) 구간 에 있 습 니 다. size: int or tuple of ints (선택 가능), 출력 난수 의 크기, 예 를 들 어 size = (m * n * k) 는 같은 규모 의 m * n * k 개의 난수 를 출력 합 니 다. 기본 값 은 None 이 며, 요 구 를 만족 시 키 는 단일 난수 만 되 돌려 줍 니 다. dtype: dtype (선택 가능): 출력 하고 싶 은 형식 입 니 다. 예 를 들 어 int 64, int 등 입 니 다. 출력: int or ndarray of ints 는 난수 나 난수 그룹 을 되 돌려 줍 니 다.
import numpy as np
a=np.random.randint(14,size=3)
b=np.random.randint(3,20)
print(a,'
',b)
#
#[ 0 8 10]
#7
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[오라클] 문자열 합치기문자열을 합쳐주는 함수 문자열을 합쳐주는 연산자...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.