FC2カウンター FPGAの部屋 2018年06月01日

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

TensorFlow + Kerasを使ってみた10(バイアスをC のヘッダに変換)

TensorFlow + Kerasを使ってみた9(畳み込み層の重みをC のヘッダに変換)”の続き。

前回は、畳み込み層の重みをC のヘッダに変換した。今回は、畳み込み層、全結合層1層目、全結合層2層目のバイアスをC のヘッダファイルに変換する。
なお、量子化の精度の評価はまだできていないので、以前に使用した量子化ビット幅を使ってやってみよう。

最初に、バイアスをC のヘッダファイルに変換する関数の fwrite_bias() を示す。

# 畳み込み層と全結合層のバイアスをCヘッダファイルに書き出す
# 2018/05/31 by marsee

def fwrite_bias(bias, wfile_name, float_b_name, fixed_wt_name, MAGNIFICATION):
    import datetime
    import numpy as np
    
    f = open(wfile_name, 'w')
    todaytime = datetime.datetime.today()
    f.write('// '+wfile_name+'\n')
    strdtime = todaytime.strftime("%Y/%m/%d %H:%M:%S")
    f.write('// {0} by marsee\n'.format(strdtime))
    f.write("\n")

    f.write('const float '+float_b_name+'['+str(bias.shape[0])+'] = {\n\t')
    for i in range(bias.shape[0]):
        f.write(str(bias[i]))
        if (i < bias.shape[0]-1):
            f.write(", ")
    f.write("\n};\n")

    f.write("\n")
    f.write('const ap_fixed<'+str(int(np.log2(MAGNIFICATION))+1)+', 1, AP_TRN_ZERO, AP_SAT> '+fixed_wt_name+'['+str(bias.shape[0])+'] = {\n\t')
    for i in range(bias.shape[0]):
        b_int = int(bias[i]*MAGNIFICATION+0.5)
        if (b_int > MAGNIFICATION-1):
            b_int = MAGNIFICATION-1
        elif (b_int < -MAGNIFICATION):
            b_int = -MAGNIFICATION
        f.write(str(float(b_int)/float(MAGNIFICATION)))
        if (i < bias.shape[0]-1):
            f.write(", ")
    f.write("\n};\n")

    f.close()


バイアスをC のヘッダファイルに出力する。

fwrite_bias(conv_layer_bias, 'conv1_bias10.h', 'conv1_fbias', 'conv1_bias', MAGNIFICATION_CONV)


MAGNIFICATION_AF = 2 ** (9-1)
fwrite_bias(dence_layer1_bias, 'af1_bias10.h', 'af1_fbias', 'af1_bias', MAGNIFICATION_AF)


fwrite_bias(dence_layer2_bias, 'af2_bias10.h', 'af2_fbias', 'af2_bias', MAGNIFICATION_AF)


畳み込み層のC ヘッダファイル conv1_bias10.h を示す。

// conv1_bias10.h
// 2018/05/30 05:00:50 by marsee

const float conv1_fbias[10] = {
 -0.007222185, 0.0038653917, -0.10034832, -0.102261335, -0.007837055, -0.0026648666, -0.15441592, -0.17244887, 0.0006733343, -0.17412803
};

const ap_fixed<9, 1, AP_TRN_ZERO, AP_SAT> conv1_bias[10] = {
 -0.00390625, 0.00390625, -0.09765625, -0.09765625, -0.00390625, 0.0, -0.15234375, -0.16796875, 0.0, -0.171875
};


全結合層1層目のC ヘッダファイル af1_bias10.h を示す。

// af1_bias10.h
// 2018/06/01 04:44:24 by marsee

const float af1_fbias[100] = {
 0.019238321, -0.01771137, -0.026059965, -0.010412146, 0.016551534, 0.07084589, -0.020174462, -0.03186624, 0.009918453, -0.0005349776, -0.03642758, 0.005985915, -0.02327196, -0.0062365746, -0.04722478, -0.015795827, 0.031737898, 0.033591818, 0.039311368, 0.062911175, -0.033230793, -0.015483118, 0.010640073, -0.008249342, 0.03172312, -0.057140794, -0.061525248, -0.0142213, 0.04127987, -0.020516558, 0.04062112, -0.00087091, -0.0095176855, 0.0044661723, -0.012458612, -0.0047280258, 0.035344347, 0.0032061578, 0.05681947, -0.0026758113, 0.02949447, -0.004827402, 0.03566772, 0.04697614, 0.04577419, -0.020583214, 0.013479586, -0.054213677, 0.066026285, -0.006469002, 0.015176552, 0.003240489, -0.033093527, -0.043891124, 0.016665407, -0.003594259, 0.030643634, 0.08290552, 0.0020669047, -0.015035913, 0.05790131, 0.053463947, 0.10505945, 0.0014302151, 0.022453506, 0.016916182, -0.034298472, -0.017455893, -0.03765105, -0.039369643, -0.0095089385, -0.04399201, -0.021653317, -0.043070063, 0.062387593, 0.02000768, 0.06076118, 0.008908279, -0.052377164, 0.036777783, -0.0069501484, -0.04945799, 0.066166185, -0.049473558, -0.0031864739, 0.06794129, 0.0066950982, -0.04975326, 0.030130928, 0.011892647, 0.029019792, 0.0011624178, -0.00398671, -0.0360224, 0.013510628, -0.014131005, -0.007958779, -0.0017996833, 0.026189724, 0.009352577
};

const ap_fixed<9, 1, AP_TRN_ZERO, AP_SAT> af1_bias[100] = {
 0.01953125, -0.015625, -0.0234375, -0.0078125, 0.015625, 0.0703125, -0.015625, -0.02734375, 0.01171875, 0.0, -0.03125, 0.0078125, -0.01953125, -0.00390625, -0.04296875, -0.01171875, 0.03125, 0.03515625, 0.0390625, 0.0625, -0.03125, -0.01171875, 0.01171875, -0.00390625, 0.03125, -0.0546875, -0.05859375, -0.01171875, 0.04296875, -0.015625, 0.0390625, 0.0, -0.00390625, 0.00390625, -0.0078125, 0.0, 0.03515625, 0.00390625, 0.05859375, 0.0, 0.03125, 0.0, 0.03515625, 0.046875, 0.046875, -0.015625, 0.01171875, -0.05078125, 0.06640625, -0.00390625, 0.015625, 0.00390625, -0.02734375, -0.0390625, 0.015625, 0.0, 0.03125, 0.08203125, 0.00390625, -0.01171875, 0.05859375, 0.0546875, 0.10546875, 0.0, 0.0234375, 0.015625, -0.03125, -0.01171875, -0.03515625, -0.03515625, -0.00390625, -0.0390625, -0.01953125, -0.0390625, 0.0625, 0.01953125, 0.0625, 0.0078125, -0.046875, 0.03515625, -0.00390625, -0.046875, 0.06640625, -0.046875, 0.0, 0.06640625, 0.0078125, -0.046875, 0.03125, 0.01171875, 0.02734375, 0.0, 0.0, -0.03125, 0.01171875, -0.01171875, -0.00390625, 0.0, 0.02734375, 0.0078125
};


全結合層2層目のC ヘッダファイル af2_bias10.h を示す。

// af2_bias10.h
// 2018/06/01 04:43:44 by marsee

const float af2_fbias[10] = {
 -0.055489913, 0.074969545, -0.014903568, 0.0025154892, -0.031464603, 0.041022513, -0.0558837, -0.027120732, -0.034348655, -0.001718868
};

const ap_fixed<9, 1, AP_TRN_ZERO, AP_SAT> af2_bias[10] = {
 -0.05078125, 0.07421875, -0.01171875, 0.00390625, -0.02734375, 0.04296875, -0.05078125, -0.0234375, -0.03125, 0.0
};

  1. 2018年06月01日 05:53 |
  2. TensorFlow, Keras
  3. | トラックバック:0
  4. | コメント:0