import cnn_module as cnn import numpy as np import threading # 데이타 X = np.array([[0,0], [0,1], [1,0], [1,1]], np.float32) Y = np.array([0,1,1,0], np.float32) dataLayer = cnn.createDatasetLayer(X, Y) # 가중치들 W1 = np.float32(np.random.randn(2,4,5)) B1 = np.float32(np.random.randn(20)) W2 = np.float32(np.random.randn(20,1)) B2 = np.float32(np.random.randn(1)) learning_rate = 0.02 optimizer = cnn.createSGD(learning_rate) #""" # 2층 구조의 네트워크 생성 with cnn.NetworkBuilder() as builder: builder.createNetwork(5) builder.addFCLayer(W1, B1) builder.addBatchnormLayer() builder.addReluLayer() #builder.addSigmoidLayer() builder.addFCLayer(W2, B2) #builder.addReluLayer() builder.addSigmoidLayer() mainNetwork = builder.getNetwork()
# 몇백만에서 5만까지 학습(encoder & decoder) # 학습은 X->X # 몇백만에서 몇 만까지 학습할때 로컬 최소 문제가 흔하게 생김 # 이때 Ada의 학습 둔화 운동량을 초기화 함 # X->Y로 바꾸고 다시 학습 (23만으로 loss가 늘어남) # 순전파는 모든 네트워크를 사용 # 학습할 때는 decoder만 backward 및 update # encoder가 X->X에 최적화가 됬다는 것이 포인트! ######################################################## # 데이터 레이어 생성 dataList = gis_data.load() dataLayer = cnn.createDatasetLayer(dataList[0], dataList[1]) # 40, 3, 200, 200 testDataLayer = cnn.createDatasetLayer(dataList[2], dataList[3]) # 10, 3, 200, 200 # 옵티마이저 생성 print("가중치 이름을 입력하세요. 만들지 않으면 gis_weight.py를 실행하여 데이터를 만드세요") weightList = gis_weight.loadWeight(input()) #incoder 네트워크 생성 with cnn.NetworkBuilder() as builder: builder.createNetwork(6) builder.addConv3dLayer(weightList[2], weightList[3], weightList[1], 0, 0) builder.addBatchnormLayer() builder.addReluLayer() builder.addFCLayer(weightList[4], weightList[5])
# 신경망 결과를 그려줍니다. visible = False # 연구 결과################ # 히 초기와랑 싸비어 초기화 없으면 loss가 몇싶만 부터 출발함... # 적용하면 몇천때 부터 시작 # batch norm이 없으면 loss가 떨어 지지 않음. ########################### # 데이터 레이어 생성 dataList = gis_data.load() dataLayer = cnn.createDatasetLayer(dataList[0], dataList[0]) # N, 3, 200, 200 print("dataList[0]", dataList[0].shape) # 옵티마이저 생성 optimizer = cnn.createAda(0.018) print("가중치 이름을 입력하세요. 만들지 않으면 gis_weight.py를 실행하여 데이터를 만드세요") weightList = gis_weight.loadWeight(input()) #incoder 네트워크 생성 with cnn.NetworkBuilder() as builder: builder.createNetwork(6) builder.addConv3dLayer(weightList[2], weightList[3], weightList[1], 0, 0) builder.addBatchnormLayer() builder.addReluLayer() builder.addFCLayer(weightList[4], weightList[5])
import cnn_module as cnn import numpy as np import gis_data2 as gis_data import gis_weight # 데이터 레이어 생성 dataList = gis_data.load() dataLayer = cnn.createDatasetLayer(dataList[0], dataList[1]) # 옵티마이저 생성 optimizer = cnn.createAda(0.018) weightList = gis_weight.loadWeight('data2_1') #encoder 네트워크 생성 with cnn.NetworkBuilder() as builder: builder.createNetwork(6) builder.addConv3dLayer(weightList[2], weightList[3], weightList[1], 0, 0) builder.addBatchnormLayer() builder.addReluLayer() builder.addFCLayer(weightList[4], weightList[5]) builder.addBatchnormLayer() builder.addReluLayer() encoderNet = builder.getNetwork() #decoder 네트워크 생성 with cnn.NetworkBuilder() as builder: builder.createNetwork(5) builder.addFCLayer(weightList[6], weightList[7]) builder.addBatchnormLayer()