if __name__ == '__main__':
    cnn = SimpleConvNet()
    # 학습시키기 전 파라미터 - 임의의 값들로 최기화된 필터
    before_filters = cnn.params['W1']
    print(before_filters.shape
          )  # (30, 1, 5, 5) # (filter_num, n_channel, filter size 5 * 5)
    # 학습 전 파라미터를 그래프로 출력
    show_filters(before_filters, num_filters=30, ncols=8)

    # 학습 끝난 후 파라미터
    # after_params = cnn.load_params('cnn_params.pkl')
    # after_filters = after_params['W1'] # load_params 에 리턴값이 없어서 에러가 났다

    # pickle 파일에 저장된 파라미터를 cnn의 필드로 로드
    cnn.load_params('cnn_params.pkl')
    after_filters = cnn.params['W1']
    # 학습 끝난 후 갱신(업데이트)된 파라미터를 그래프로 출력
    show_filters(after_filters, 30, 8)

    # 실제 이미지에 적용
    cnn = SimpleConvNet()
    # 학습시키기 전 파라미터 - 임의의 값들로 최기화된 필터
    before_filters = cnn.params['W1']
    print(before_filters.shape
          )  # (30, 1, 5, 5) # (filter_num, n_channel, filter size 5 * 5)
    # 학습 전 파라미터를 그래프로 출력
    show_filters(before_filters, num_filters=16, ncols=4)

    # 학습 끝난 후 파라미터
    # after_params = cnn.load_params('cnn_params.pkl')
from ch07.simple_convnet import SimpleConvNet


def filter_show(filters, nx=8, margin=3, scale=10):
    """
    c.f. https://gist.github.com/aidiary/07d530d5e08011832b12#file-draw_weight-py
    """
    FN, C, FH, FW = filters.shape
    ny = int(np.ceil(FN / nx))

    fig = plt.figure()
    fig.subplots_adjust(left=0,
                        right=1,
                        bottom=0,
                        top=1,
                        hspace=0.05,
                        wspace=0.05)

    for i in range(FN):
        ax = fig.add_subplot(ny, nx, i + 1, xticks=[], yticks=[])
        ax.imshow(filters[i, 0], cmap=plt.cm.gray_r, interpolation='nearest')
    plt.show()


network = SimpleConvNet()
# ランダム初期化後の重み
filter_show(network.params['W1'])

# 学習後の重み
network.load_params("params.pkl")
filter_show(network.params['W1'])