引言
本文适用于那些对人工神经网络
( ANN)内部正在发生的问题感兴趣的人。 现在,几乎每个人都可以使用大多数编程语言中可用的现成库来开发自己的ANN。 在本文中,我将尝试展示对象(
Pattern )在ANN的各个层中的外观如何,并使用
Tensorflow深度学习
库和
Keras插件
进行开发和编译。
二手软件
需要以下组件(我为案例指定的版本):
- 张量流1.10.0
- keras 2.2.4
- matplotlib 2.2.0
- 模运算
- numpy1.14.3
也可以绘制网络体系结构,但是为此,必须安装可视化工具(在我的情况下使用
keras )和方法中
PLOT_PATTERN_PROCCESS(...)
建立
PLOT_MODEL =真 def PLOT_PATTERN_PROCCESS(model, pattern, FOLDER_TO_SAVE, grid_size=(3, 3), limit_size_layer=(15, 15), PLOT_MODEL=True):

主要思想
有必要选择一种模式(我们将观察的通道),选择它之后,网络被分为
张量层。 在从第二层到最后一层的循环中,创建了一个新的网络,其中输出是循环中该层的编号,并且跳过该模式,结果是网络输出处的n维数组。
实作
连接库
from keras.models import * from keras.layers import * import matplotlib.pyplot as plt import os import numpy as np
使用的方法:
定义PLOT_PATTERN_PROCCESS(模型,图案,FOLDER_TO_SAVE,grid_size =(3、3),limit_size_layer =(15、15),PLOT_MODEL = True): def PLOT_PATTERN_PROCCESS(model, pattern, FOLDER_TO_SAVE, grid_size=(3, 3), limit_size_layer=(15, 15), PLOT_MODEL=True): """ :param model: keras :type model: Sequential :param pattern: , :type pattern: np.array :param FOLDER_TO_SAVE: :type FOLDER_TO_SAVE: str :param grid_size: :type grid_size: tuple :param limit_size_layer: :type limit_size_layer: tuple :param PLOT_MODEL: :type PLOT_MODEL: PLOT_MODEL """ SAVE_AR_LIST = [] for num_layer in range(1, len(model.layers)): LO = model.layers[num_layer].output _model = Model(inputs=model.input, outputs=LO) if ( len(_model.output_shape) == 3 and _model.output_shape[1] > limit_size_layer[0] and _model.output_shape[2] > limit_size_layer[1] ): _output = _model.predict(pattern)[0] SAVE_AR_LIST.append( [ num_layer, model.layers[num_layer].name, _output.tolist() ] )
def build_model(IN_SHAPE = 50,CLASSES = 5)->顺序的: def build_model(IN_SHAPE=50,CLASSES=5) -> Sequential: inputs_LAYER0 = Input(shape=(IN_SHAPE,IN_SHAPE)) Dense_2_2 = Dense(75, activation='relu')(inputs_LAYER0) Dense_2_3 = Dense(50, activation='relu', name="my_dense")(Dense_2_2) Dense_2_4 = Dense(25, activation='relu')(Dense_2_3) Dense_2_5 = Dense(10, activation='relu')(Dense_2_4) flat_f_0 = Flatten()(Dense_2_5) final_layer= Dense(CLASSES, activation='softmax')(flat_f_0)
程式码
model_ = build_model() pattern = np.random.sample((1,50,50)) os.makedirs("PLOT_PATTERN_PROCCESS") PLOT_PATTERN_PROCCESS( model = model_, pattern = pattern, FOLDER_TO_SAVE = "PLOT_PATTERN_PROCCESS", PLOT_MODEL=False, grid_size=(2, 2) )
程序说明
方法
build_model()
以
顺序格式返回一个ANN模型,该模型旨在将某些东西分为5类。
model.summary() _________________________________________________________________ Layer (type) Output Shape Param
从体系结构中可以看到,模式是大小为50x50的数组。 可变的
pattern
并且有一个可观察的物体。
接下来,创建一个目录
os.makedirs("PLOT_PATTERN_PROCCESS")
,
将保存整个结果。
方法说明PLOT_PATTERN_PROCCESS
我已经描述了上面方法的含义,但是重要的是我们并不需要所有的图层,因为某些图层的输出无法显示,或者不会提供任何信息。
获取输出模式发生在这里:
_output = _model.predict(pattern)[0]
在此实现中,可以显示尺寸不小于参数的二维输出模式
limit_size_layer
在ANN模型的各层之间交替显示
SAVE_AR_LIST
逐渐填充数据:
- 层数
num_layer
- 图层名称
model.layers[num_layer].name
- 输出二维数组
_output.tolist()
逐渐排除以下一项结果
SAVE_AR_LIST
,
并将其放在画布单元格中
ax.imshow(np.array(ar), cmap='viridis', extent=(xmin, xmax, ymin, ymax))
。
结果是一个文件
(0.png)
推荐建议
祝你好运!