動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 14.04 LTS desktop amd64
TensorFlow v0.11
cuDNN v5.1 for Linux
CUDA v8.0
Python 2.7.6
IPython 5.1.0 -- An enhanced Interactive Python.
関連 http://qiita.com/7of9/items/b364d897b95476a30754
sine curveを学習した時のweightとbiasをもとに自分でネットワークを再現して出力を計算しようとしている。
http://qiita.com/7of9/items/ee9d866eee453c94d519
にてconvolutionを実装したので、実際にsine curveを再現しようとした。
code v0.1
reproduce_sine.py
'''
v0.1 Dec. 10, 2016
- add calc_sigmoid()
- add fully_connected network
- add input data for sine curve
=== [read_model_var.py] branched to [reproduce_sine.py] ===
v0.4 Dec. 10, 2016
- add 2x2 network example
v0.3 Dec. 07, 2016
- calc_conv() > add bias
v0.2 Dec. 07, 2016
- fix calc_conv() treating src as a list
v0.1 Dec. 07, 2016
- add calc_conv()
'''
import numpy as np
import math
model_var = np.load('model_variables.npy')
print "all shape:",(model_var.shape)
def calc_sigmoid(x):
return 1.0 / (1.0 + math.exp(x))
def calc_conv(src, weight, bias):
wgt = weight.shape
# print wgt # debug
#conv = list(range(bias.size))
conv = [0.0] * bias.size
# weight
for idx1 in range(wgt[0]):
for idx2 in range(wgt[1]):
conv[idx2] = conv[idx2] + src[idx1] * weight[idx1,idx2]
# bias
for idx2 in range(wgt[1]):
conv[idx2] = conv[idx2] + bias[idx2]
# activation function
for idx2 in range(wgt[1]):
conv[idx2] = calc_sigmoid(conv[idx2])
return conv # return list
inpdata = np.linspace(0, 1, 10).astype(float).tolist()
for din in inpdata:
# input layer (1 node)
inlist = [ din ]
outdata = calc_conv(inlist, model_var[0], model_var[1])
# hidden layer 1 (1 node)
outdata = calc_conv(outdata, model_var[2], model_var[3])
# hidden layer 2 (7 node)
outdata = calc_conv(outdata, model_var[4], model_var[5])
# hidden layer 3 (7 node)
outdata = calc_conv(outdata, model_var[6], model_var[7])
# output layer (1 node)
outdata = calc_conv(outdata, model_var[8], model_var[9])
dout = outdata[0] # ouput is 1 node
print '%.3f, %.3f' % (din,dout)
いでよ!マイsine curve!!!
結果
$ python reproduce_sine.py
all shape: (10,)
0.000, 0.705
0.111, 0.991
0.222, 0.999
0.333, 0.999
0.444, 0.999
0.556, 0.999
0.667, 0.999
0.778, 0.999
0.889, 0.999
1.000, 0.999
きれいなsine curveが再現されました(棒読み)。
TODO
以下のいずれか
- TensorFlowで途中計算の値を出力する
- validationのnetworkを用意するとかstackoverflowで見た
- TensorBoardを利用するようにして、計算過程を確認する
- TensorBoardの扱いが面倒だったりする
- Fully connectedの計算資料を探す
- sigmoid関数の適用・不適用など確認