- tf中计算图的概念
- tf.app.flags()和tf.app.run()
- tf.placehoder,占位符
- tf.Variable,变量
- tf.Session
- tf.variable_scope()
- tf.reduce_mean()
- tensorflow中定义Tensor时的参数name有什么用?
- tensorflow中关于随机数生成种子tf.set_random_seed()
- tf.tile()
- tf.fill()
- tf.slim()用法
- slim.arg_scope()
- tensorflow部分恢复模型
- tf.multiply()和tf.matmul()
- np.maximum,np.minimum
- np.setprintoption()
- python复杂网络分析库networkx
- pandas
- random.shuffle()
- VGGNet
- 05_09_train.py
- 问题
tensorflow学习
tf中计算图的概念
一个机器学习任务的核心是模型的定义以及模型的参数求解方式,对这两者进行抽象之后,可以确定一个唯一的计算逻辑,将这个逻辑用图表示,称之为计算图。计算图表现为有向无环图
,定义了数据的流转方式,数据的计算方式,以及各种计算之间的相互依赖关系等。
- 节点:
基于梯度下降求解的机器学习问题,一般分为前向求值和后向求梯度两个过程。其中,前向过程由用户指定,包括模型定义,目标函数、损失函数、激活函数的选取等;后向的计算过程,包括计算梯度,更新梯度等,在优化器中已经由TensorFlow实现,用户不必关心。
前向图中的节点,根据功能主要分为计算节点(Operation)、存储节点(Variable)和数据节点(Placeholder)3类。
1、Operation:对应无状态的计算或控制操作,主要负责算法逻辑表达或者流程控制。
2、Variable:对应有状态的变量操作,通常用来存储模型参数。
3、Placeholder:用于定义输入数据的类型和形状等属性,是对数据的统一抽象。
后向图中的节点,也可以分为3类,如下:
1、梯度:迭代过程中,模型参数的梯度。
2、参数更新操作:根据优化器的优化算法,结合梯度更新相应的模型参数。
3、更新后的参数:更新后的模型参数,用于模型的下一轮训练。 - 边:
计算图中的边是有向边,定义了操作之间的关系,分为两类:一类用来传输数据,称为数据边
;另一类用来定义依赖关系,称为控制边
。所有的节点都通过数据边或者控制边连接,其中入度为0的节点没有前置依赖,可以立即执行;入度大于0的节点,要等待其依赖的所有节点执行结束之后,才可以执行。 - 计算图:TensorFlow中可以定义多个计算图,不同计算图上的张量和运算相互独立,因此每一个计算图都是一个独立的计算逻辑。
1、启动:启动计算图的第一步是创建一个会话(Session)对象,如果没有任何的创建参数,会话构造器将启动默认图。一个Session可以运行多个计算图,一个计算图也可以在多个Session中运行。
2、运行方式:计算图的运行参考了拓扑排序的思想。
3、硬件调度:在实现上,TensorFlow 将图形定义转换成分布式执行的操作,以充分利用可用的计算资源(如CPU或GPU)。一般你不需要显式指定使用CPU还是GPU,TensorFlow 能自动检测。如果检测到 GPU,TensorFlow 会尽可能地利用找到的第一个 GPU 来执行操作。
tensorflow程序一般分为两个阶段:
1、定义计算图所有的计算
2、在session中执行计算
tf.app.flags()和tf.app.run()
tf.app.flags()具体在tensorflow中我们该怎么使用呢?
首先我们通过tf.app.flags
来调用这个flags.py
文件,这样我们就可以用flags.DEFINE_interger/float()
来添加命令行参数,而FLAGS=flags.FLAGS
可以实例化这个解析参数的类从对应的命令行参数取出参数。
import tensorflow as tf
flags = tf.app.flags
flags.DEFINE_string('data_dir', '/tmp/mnist', 'Directory with the MNIST data.')
flags.DEFINE_integer('batch_size', 5, 'Batch size.')
flags.DEFINE_integer('num_evals', 1000, 'Number of batches to evaluate.')
FLAGS = flags.FLAGS
print(FLAGS.data_dir, FLAGS.batch_size, FLAGS.num_evals)
tf.app.run()一般出现在下述代码:
if __name__ == '__main__':
tf.app.run()
上述第一行代码表示如果当前是从其它模块调用的该模块程序,则不会运行main函数!而如果就是直接运行的该模块程序,则会运行main函数。
具体第二行的功能从源码开始分析,源码如下:
flags_passthrough=f._parse_flags(args=args)
这里的parse_flags
就是我们tf.app.flags
源码中用来解析命令行参数的函数。所以这一行就是解析参数的功能;下面两行代码也就是tf.app.run
的核心意思:执行程序中main函数,并解析命令行参数!
tf.placehoder,占位符
即必须在执行时feed值。
x = tf.placeholder(tf.float32, [None, 784])
#表示成员类型float32, [None, 784]是tensor的shape, None表示第一维是任意数量,784表示第二维是784维
y_ = tf.placeholder(tf.float32, [None, 10])
tf.sparse_placeholder(dtype, shape, name=None):tf.sparse_placeholder 函数返回一个可以用作提供值的句柄的 SparseTensor,但不能直接计算.
tf.Variable,变量
当训练模型时,用variable来存储和更新参数。用于表示算法迭代过程中的中间参数。
variable实例化时必须有初始值。MNist中,定义w和b:
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
tf.Session
Session
是 Tensorflow 为了控制,和输出文件的执行的语句. 运行 session.run()
可以获得你要得知的运算结果, 或者是你所要运算的部分.
import tensorflow as tf
# create two matrixes
matrix1 = tf.constant([[3,3]])
matrix2 = tf.constant([[2],
[2]])
product = tf.matmul(matrix1,matrix2)
因为 product
不是直接计算的步骤, 所以我们会要使用 Session
来激活 product
并得到计算结果. 有两种形式使用会话控制 Session
。
# method 1
sess = tf.Session()
result = sess.run(product)
print(result)
sess.close()
# method 2
with tf.Session() as sess:
result2 = sess.run(product)
print(result2)
tf.variable_scope()
TensorFlow提供了Variable Scope 这种独特的机制来共享变量。这个机制涉及两个主要函数:
tf.get_variable(<name>, <shape>, <initializer>) 创建或返回给定名称的变量
tf.variable_scope(<scope_name>) 管理传给get_variable()的变量名称的作用域
当前环境的作用域可以通过函数tf.get_variable_scope()
获取,并且reuse
标志可以通过调用reuse_variables()设置为True,这个非常有用,如下
with tf.variable_scope("foo"):
v = tf.get_variable("v", [1])
tf.get_variable_scope().reuse_variables()
v1 = tf.get_variable("v", [1])
assert v1 is v
作用域中的resuse默认是False,调用函数reuse_variables()可设置为True,一旦设置为True,就不能返回到False,并且该作用域的子空间reuse都是True。如果不想重用变量,那么可以退回到上层作用域,相当于exit当前作用域,如
variable scope的Initializers可以创递给子空间和tf.get_variable()函数,除非中间有函数改变,否则不变。
with tf.variable_scope("foo", initializer=tf.constant_initializer(0.4)):
v = tf.get_variable("v", [1])
assert v.eval() == 0.4 # Default initializer as set above.
w = tf.get_variable("w", [1], initializer=tf.constant_initializer(0.3)):
assert w.eval() == 0.3 # Specific initializer overrides the default.
with tf.variable_scope("bar"):
v = tf.get_variable("v", [1])
assert v.eval() == 0.4 # Inherited default initializer.
with tf.variable_scope("baz", initializer=tf.constant_initializer(0.2)):
v = tf.get_variable("v", [1])
assert v.eval() == 0.2 # Changed default initializer.
算子(ops)会受变量作用域(variable scope)影响,相当于隐式地打开了同名的名称作用域(name scope),如+这个算子的名称为foo/add
with tf.variable_scope("foo"):
x = 1.0 + tf.get_variable("v", [1])
assert x.op.name == "foo/add"
除了变量作用域(variable scope),还可以显式打开名称作用域(name scope),名称作用域仅仅影响算子的名称,不影响变量的名称。另外如果tf.variable_scope()传入字符参数,创建变量作用域的同时会隐式创建同名的名称作用域。
with tf.variable_scope("foo"):
with tf.name_scope("bar"):
v = tf.get_variable("v", [1])
x = 1.0 + v
assert v.name == "foo/v:0"
assert x.op.name == "foo/bar/add"
- name_scope 对 get_variable新建变量的name属性无影响;对variable新建变量的name属性增加了“范围”标识。
- variable_scope对get_variable新建变量的name属性和variable新建变量的name属性都增加了“范围”标识。
- get_variable新建变量如果遇见重复的name则会因为重复而报错。
- variable新建的变量如果遇见重复的name则会自动修改前缀,以避免重复出现。
tensorflow里面namescope,variable_scope等如何理解? 主要是因为 变量共享 的需求。 而这就不得不谈到tf. get_variable()了。因为如果使用Variable 的话每次都会新建变量,但是大多数时候我们是希望一些变量重用的,所以就用到了get_variable()。它会去搜索变量名,然后没有就新建,有就直接用。 既然用到变量名了,就涉及到了名字域的概念。通过不同的域来区别变量名,毕竟让我们给所有变量都直接取不同名字还是有点辛苦的。所以为什么会有scope 的概念。 name_scope 作用于操作,variable_scope 可以通过设置reuse 标志以及初始化方式来影响域下的变量。 当然对我们而言还有个更直观的感受就是:在tensorboard 里可视化的时候用名字域进行封装后会更清晰 1、对于使用tf.Variable来说,tf.namescope和tf.variable_scope功能一样,都是给变量加前缀,相当于分类管理,模块化。 2、对于tf.get_variable来说,tf.name_scope对其无效,也就是说tf认为当你使用tf.get_variable时,你只归属于tf.variable_scope来管理共享与否。 注意:当多个tf_variable_scope嵌套时,如果中间某层开启了reuse=True, 则内层自动全部共享,即使内层设置了reuse=False。而且,一旦使用tf.get_variable_scope().reuse_variables()打开了当前域共享,就不能关闭了! 1. `tf.variable_scope`和`tf.get_variable`必须要搭配使用(全局scope除外),为share提供支持。 2. `tf.Variable`可以单独使用,也可以搭配`tf.name_scope`使用,给变量分类命名,模块化。 3. `tf.Variable`和`tf.variable_scope`搭配使用不伦不类,不是设计者的初衷。
tf.reduce_mean()
reduce_mean(input_tensor,
axis=None,
keep_dims=False,
name=None)
第一个参数input_tensor: 输入的待降维的tensor;
第二个参数axis: 指定的轴,如果不指定,则计算所有元素的均值;
第三个参数keep_dims:是否降维度,设置为True,输出的结果保持输入tensor的形状,设置为False,输出结果会降低维度;
第四个参数name: 操作的名称;
import tensorflow as tf
x = [[1,2,3],
[1,2,3]]
xx = tf.cast(x,tf.float32)
mean_all = tf.reduce_mean(xx, keep_dims=False)
mean_0 = tf.reduce_mean(xx, axis=0, keep_dims=False)
mean_1 = tf.reduce_mean(xx, axis=1, keep_dims=False)
with tf.Session() as sess:
m_a,m_0,m_1 = sess.run([mean_all, mean_0, mean_1])
print m_a # output: 2.0
print m_0 # output: [ 1. 2. 3.]
print m_1 #output: [ 2. 2.]
# 如果设置保持原来的张量维度,keep_dims=True
print m_a # output: [[ 2.]]
print m_0 # output: [[ 1. 2. 3.]]
print m_1 #output: [[ 2.], [ 2.]]
类似函数还有:
- tf.reduce_sum :计算tensor指定轴方向上的所有元素的累加和;
- tf.reduce_max : 计算tensor指定轴方向上的各个元素的最大值;
- tf.reduce_all : 计算tensor指定轴方向上的各个元素的逻辑和(and运算);
- tf.reduce_any: 计算tensor指定轴方向上的各个元素的逻辑或(or运算);
tensorflow中定义Tensor时的参数name有什么用?
# With name
x1 = tf.Variable(0, name="X1")
# Without
one = tf.constant(1)
name参数是可选的(您可以创建带或不带它的变量和常量),并且您在程序中使用的变量不依赖于它。 name在以下几个方面很有帮助:
- 当想要保存和恢复变量时。 ```python matrix_1 = tf.Variable([[1, 2], [2, 3]], name=”v1”) matrix_2 = tf.Variable([[3, 4], [5, 6]], name=”v2”) init = tf.initialize_all_variables()
saver = tf.train.Saver()
sess = tf.Session() sess.run(init) save_path = saver.save(sess, “/model.ckpt”) sess.close()
- matrix_1和matrix_2保存的时候以v1和v2保存
- 在tensorboard中使用name来很好地显示边的名称
```python
import tensorflow as tf
with tf.name_scope('hidden') as scope:
a = tf.constant(5, name='alpha')
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0), name='weights')
b = tf.Variable(tf.zeros([1]), name='biases')
- 您可以将Python命名空间和TensorFlow命名空间想象为两个平行线。 TensorFlow空间中的名称实际上是属于任何TensorFlow变量的“真实”属性,而Python空间中的名称只是在脚本运行期间指向TensorFlow变量的临时指针。 (也就是上面代码中的
a
,W
,b
都是在Python空间中定义的变量,而name参数定义的如alpha, weights, biases
都是在TensorFlow空间中的)这就是为什么在保存和恢复变量时,只使用TensorFlow名称的原因,因为脚本终止后Python命名空间不再存在,但Tensorflow命名空间仍然存在于保存的文件中。
tensorflow中关于随机数生成种子tf.set_random_seed()
Tensorflow中的随机数生成种子是在数据流图资源上运作的。每一个数据流图中,我们可以执行针对随机数生成种子应用不同的操作(operation)。事实上,随机数生成种子作为random系列函数的参数之一,可在相应的参数列表进行设置,这就是op-level的操作。与之对应的是graph-leveltf.set_random_seed()的操作tf.set_random_seed(),它管理着同一数据流图下的资源。
原文链接:https://blog.csdn.net/qq_31878983/article/details/79495810
tf.tile()
即:通过“平铺”一个给定的 tensor 来构造一个新的 tensor。用人话讲就是:把输入的 tensor,在指定的维度上复制N遍(就像铺瓷砖一样),来创建出一个新的 tensor。
3个参数:
input:输入的tensor
multiples:在指定的维度上复制原tensor的次数
name:operation的名字
import tensorflow as tf
with tf.Session() as sess:
a = tf.constant([[15, 16], [17, 18]])
b = tf.tile(a, [1, 3])
c = tf.tile(a, [3, 2])
print('------------------------------------')
print(sess.run(a))
print('------------------------------------')
print(sess.run(b))
print('------------------------------------')
print(sess.run(c))
tf.fill()
tf.fiil(dims, value, name=None)
参数:
dims: 类型为int32的tensor对象,用于表示输出的维度(1-D, n-D),通常为一个int32数组,如:[1], [2,3]等<br /> value: 常量值(字符串,数字等),该参数用于设置到最终返回的tensor对象值中<br /> name: (可选)当前操作别名<br />返回:
tensor对象,类型和value一致
tf.slim()用法
slim中的arg_scope:如果你的网络有大量相同的参数,就可以用arg_scope处理一下。
slim中的repeat和stack操作:repeat可以减少代码量,比如创建几个相同的卷积层。而stack是处理卷积核或者输出不一样的情况。
# 假设定义三个相同的卷积层
net = ...
net = slim.conv2d(net, 256, [3, 3], scope='conv3_1')
net = slim.conv2d(net, 256, [3, 3], scope='conv3_2')
net = slim.conv2d(net, 256, [3, 3], scope='conv3_3')
net = slim.max_pool2d(net, [2, 2], scope='pool2')
# repeat操作:
net = slim.repeat(net, 3, slim.conv2d, 256, [3, 3], scope='conv3')
net = slim.max_pool2d(net, [2, 2], scope='pool2')
# 假设定义三层FC
# Verbose way:
x = slim.fully_connected(x, 32, scope='fc/fc_1')
x = slim.fully_connected(x, 64, scope='fc/fc_2')
x = slim.fully_connected(x, 128, scope='fc/fc_3')
# 使用stack操作:
slim.stack(x, slim.fully_connected, [32, 64, 128], scope='fc')
slim.arg_scope()
with slim.arg_scope([slim.conv2d, slim.max_pool2d, slim.avg_pool2d],stride = 1, padding = 'VALID'):
net = slim.conv2d(inputs, 32, [3, 3], stride = 2, scope = 'Conv2d_1a_3x3')
net = slim.conv2d(net, 32, [3, 3], scope = 'Conv2d_2a_3x3')
net = slim.conv2d(net, 64, [3, 3], padding = 'SAME', scope = 'Conv2d_2b_3x3')
在使用过程中可以直接slim.conv2d( )等函数设置默认参数。例如在下面的代码中,不做单独声明的情况下,slim.conv2d, slim.max_pool2d, slim.avg_pool2d三个函数默认的步长都设为1,padding模式都是’VALID’的。但是也可以在调用时进行单独声明。这种参数设置方式在构建网络模型时,尤其是较深的网络时,可以节省时间。
tensorflow部分恢复模型
slim.get_variables_to_restore(include=None, exclude=None)
详细可参考:restore的几种方式
tf.multiply()和tf.matmul()
前者是对应元素相乘。
np.maximum,np.minimum
np.maximum(X, Y, out=None)
# example
>> np.maximum([-3, -2, 0, 1, 2], 0)
array([0, 0, 0, 1, 2])
X和Y逐位进行比较,选择最大值.
np.setprintoption()
np.set_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, suppress=None, nanstr=None, infstr=None)
thredhold:int, optional,当数组数目过大时,设置显示几个数字,其余用省略号(Total number of array elements which trigger summarization rather than full repr (default 1000).)
# 对于输出array时,array中间是省略号而没有输出全部内容的有效解决办法:
np.set_printoptions(threshold=np.inf)
python复杂网络分析库networkx
可以画知识图谱
pandas
- pd.read_excel()
sheetname:默认是sheetname为0,返回多表使用sheetname=[0,1],若sheetname=None是返回全表 。注意:int/string返回的是dataframe,而none和list返回的是dict of dataframe。
header :指定作为列名的行,默认0,即取第一行,数据为列名行以下的数据;若数据不含列名,则设定 header = None
names:指定列的名字,传入一个list数据
skiprows:省略指定行数的数据 ~
运算符相当于取反。
比如去除面部属性为牙齿异常的数据:loandata_symptom = loandata_symptom[~(loandata_symptom['faceAttribute']=="牙齿异常")]
random.shuffle()
用于将一个列表中的元素打乱
VGGNet
gcn_features: Tensor("graphconvolution_2/SparseTensorDenseMatMul/SparseTensorDenseMatMul:0", shape=(?, 100), dtype=float32)
target_conv_layer: Tensor("InceptionResnetV1/Block8/add:0", shape=(?, 3, 3, 1792), dtype=float32)
image_representation: (?, 1792)
graph_representation: Tensor("graphconvolution_2/SparseTensorDenseMatMul/SparseTensorDenseMatMul:0", shape=(?, 100), dtype=float32)
image_representation_high: 100
graph_representation: Tensor("merge/Reshape:0", shape=(1, 12, 100), dtype=float32)
graph_representation: <class 'tensorflow.python.framework.ops.Tensor'>
graph_representation_copy: (1, 12, 100)
连接张量
merge_feature: (1, 12, 100)
merge_feature: (1, 100)
net: Tensor("merge/merge_fc1/Relu:0", shape=(1, 50), dtype=float32)
logits: Tensor("merge/res_fc2/BiasAdd:0", shape=(1, 2), dtype=float32)
class_output: Tensor("Max:0", shape=(1,), dtype=float32)
gradient_temp: [<tf.Tensor 'gradients/InceptionResnetV1/Logits/AvgPool_1a_8x8/AvgPool_grad/AvgPoolGrad:0' shape=(?, 3, 3, 1792) dtype=float32>]
target_conv_layer_grad: Tensor("gradients_1/InceptionResnetV1/Logits/AvgPool_1a_8x8/AvgPool_grad/AvgPoolGrad:0", shape=(?, 3, 3, 1792), dtype=float
32)
gb_grad:Tensor("gradients_2/InceptionResnetV1/Conv2d_1a_3x3/Conv2D_grad/Conv2DBackpropInput:0", shape=(?, 160, 160, 3), dtype=float32)
target_gcn_layer_grad: Tensor("gradients_3/merge/Reshape_grad/Reshape:0", shape=(12, 100), dtype=float32)
target_gcn_grad_input: None
y_c_value: [2.3687372]
class_output_value: [2.3687372]
预测结果: [1]
See visualization of below category
image_batch: (1, 160, 160, 3)
target_conv_layer_value: (1, 3, 3, 1792)
target_conv_layer_grad_value: (1, 3, 3, 1792)
nodes_representation_value: (12, 100)
target_gcn_layer_grad_value: (12, 100)
grads_val shape: (3, 3, 1792)
img shape: (160, 160, 3)
image shape: (160, 160, 3)
cam_heatmap1 shape: (160, 160, 3)
05_09_train.py
class_num: 2
test
train
train_image_data: (869, 160, 160, 3)
test_image_data: (226, 160, 160, 3)
- gpu不能使用,考虑为版本不匹配问题,将tensorflow-gpu从1.9升级到1.13
- 损失函数可以使用
tf.nn.sigmoid_cross_entropy_with_logits
output使用[n_samples, n_labels]
即可
从 result1 和 result2 可以看出,传入 softmax_cross_entropy_with_logits 的 logits 是不需要进行softmax,也就是说 tf 中的 softmax_cross_entropy_with_logits 函数会进行一次 softmax 操作 sparse交叉熵的使用 使用 sparse_softmax_cross_entropy_with_logits 函数, 对于非 one_hot 的标签进行交叉熵计算
问题
1、ggnn.py
邻接矩阵大小为何是`2*710*710`.
graph_representation和attention scores有用吗?
2、【done】 vgg16.py
3、gradcam原理:这样就很好的解决了反卷积和导向反向传播对类别不敏感的问题。当然,Grad-CAM的神奇之处还不仅仅局限在对图片分类的解释上,任何与图像相关的深度学习任务,只要用到了CNN,就可以用Grad-CAM进行解释,如图像描述(Image Captioning),视觉问答(Visual Question Answering)等,所需要做的只不过是把y^c换为对应模型中的那个值即可。
如何与gcn结合的呢?
**_是否利用了属性标签作为监督信息呢_**,知识又是否作为监督信息了呢?
4、test_online.py
中,为何还需要merge_feature2。
5、GCN的batch如何定义?是否需要全图信息才能训练呢?
针对某个图片,是如何预测的呢?(原始GCN中节点分类是如何预测的呢)
6、test_online_gcn....py
中,命令行参数中的distributed_function
是干什么用的
`placeholders`中的`labels_mask`什么意思?`support`又是什么意思
`batch_size=1`
7、inception_resnet_v1的end_points返回值什么意思?
新上传的代码中,../dataset
文件夹不存在
测试后,lz0017图片的测试质量较好,知识图谱是写死的(根据数据库中标记的图片),我们现场演示时也可这样。
- 对
./dataset/test/Beta-thalassemia_normal
下所有图片测试如下:
['gz0001_201906259791.png症状为: β-地中海贫血症', 'GZ0002_201907043169.png症状为: β-地中海贫血症', 'gz0003_201906259109.png症状为: β-地中海贫血症', 'GZ0004_201907119866.png症状为: β
-地中海贫血症', 'GZ0005_201907042717.png症状为: β-地中海贫血症', 'GZ0007_201907175864.png症状为: β-地中海贫血症', 'gz0008_201906274788.png症状为: β-地中海贫血症', 'GZ0009_20190625314
7.png症状为: β-地中海贫血症', 'gz0010_201907184081.png症状为: β-地中海贫血症', 'gz0011_201907061413.png症状为: β-地中海贫血症', 'gz0012_201907068663.png症状为: β-地中海贫血症', 'GZ0
013_201907238838.png症状为: β-地中海贫血症', 'gz0016_201907067721.png症状为: β-地中海贫血症', 'gz0017_201906207853.png症状为: β-地中海贫血症', 'gz0018_201906203711.png症状为: β-地中
海贫血症', 'gz0019_201907028498.png症状为: β-地中海贫血症', 'GZ001B_201907048994.png症状为: 正常', 'GZ001C_201907043874.png症状为: 正常', 'gz0020_201907027097.png症状为: β-地中海贫血
症', 'GZ0021_201907176861.png症状为: β-地中海贫血症', 'GZ0023_201906254489.png症状为: β-地中海贫血症', 'gz0024_201907271961.png症状为: β-地中海贫血症', 'GZ0024_201907278974.png症状为
: β-地中海贫血症', 'GZ0025_201907115480.png症状为: β-地中海贫血症', 'GZ0026_201907112470.png症状为: β-地中海贫血症', 'GZ0028_201907253858.png症状为: β-地中海贫血症', 'gz0029_2019072
06942.png症状为: β-地中海贫血症', 'GZ002B_201907259659.png症状为: β-地中海贫血症', 'GZ002C_201907255243.png症状为: β-地中海贫血症', 'GZ0030_201907235168.png症状为: β-地中海贫血症',
'gz0031_201907201733.png症状为: β-地中海贫血症', 'GZ0032_201907136830.png症状为: 正常', 'gz0033_201907064748.png症状为: β-地中海贫血症', 'GZ0034_201907117502.png症状为: β-地中海贫血
症', 'gz0035_201907184497.png症状为: β-地中海贫血症', 'gz0036_201907131941.png症状为: β-地中海贫血症', 'gz0037_201907208226.png症状为: β-地中海贫血症', 'GZ0038_201907111484.png症状为
: β-地中海贫血症', 'gz0039_201907186034.png症状为: β-地中海贫血症', 'GZ003B_201907267269.png症状为: β-地中海贫血症', 'GZ003C_201907269908.png症状为: β-地中海贫血症', 'gz0040_2019072
05521.png症状为: β-地中海贫血症', 'gz0041_201907136844.png症状为: β-地中海贫血症', 'GZ0042_201907113730.png症状为: β-地中海贫血症', 'gz0043_201907202707.png症状为: β-地中海贫血症',
'GZ0044_201907173924.png症状为: β-地中海贫血症', 'GZ0045_201907136440.png症状为: β-地中海贫血症', 'GZ0046_201907111125.png症状为: β-地中海贫血症', 'gz0047_201907138753.png症状为: β-
地中海贫血症', 'GZ0048_201907139363.png症状为: 正常', 'GZ0049_201907271571.png症状为: β-地中海贫血症', 'GZ004B_201907303036.png症状为: 正常', 'GZ004C_201907305188.png症状为: β-地中海
贫血症', 'gz0050_201907256211.png症状为: β-地中海贫血症', 'gz0051_201907235127.png症状为: β-地中海贫血症', 'gz0052_201907138503.png症状为: β-地中海贫血症', 'GZ0053_201907171727.png症
状为: β-地中海贫血症', 'gz0054_201907231678.png症状为: β-地中海贫血症', 'gz0055_201907232609.png症状为: β-地中海贫血症', 'gz0056_201907201034.png症状为: β-地中海贫血症', 'GZ0057_201
907138054.png症状为: 正常', 'GZ005B_201907266996.png症状为: β-地中海贫血症', 'GZ005C_201907265683.png症状为: β-地中海贫血症', 'gz0061_201907256710.png症状为: β-地中海贫血症', 'GZ0063
_201907178619.png症状为: β-地中海贫血症', 'gz0064_201907184484.png症状为: β-地中海贫血症', 'GZ0065_201907208892.png症状为: β-地中海贫血症', 'gz0066_201907178901.png症状为: β-地中海
贫血症', 'gz0067_201907259960.png症状为: β-地中海贫血症', 'GZ0068_201907231772.png症状为: β-地中海贫血症', 'GZ0068_201907238363.png症状为: β-地中海贫血症', 'GZ0069_201907273359.png症
状为: β-地中海贫血症', 'GZ006B_201907312147.png症状为: β-地中海贫血症', 'GZ006C_201907312545.png症状为: β-地中海贫血症', 'GZ0070_201907259374.png症状为: β-地中海贫血症', 'GZ0071_201
907319882.png症状为: β-地中海贫血症', 'GZ0072_201907319723.png症状为: β-地中海贫血症', 'GZ007B_201908132548.png症状为: β-地中海贫血症', 'GZ007C_201908134994.png症状为: β-地中海贫血
症', 'LZ00008_201908151378.png症状为: β-地中海贫血症', 'LZ00010_201908151803.png症状为: β-地中海贫血症', 'LZ0001_201908136873.png症状为: β-地中海贫血症', 'LZ0002_201908139452.png症状
为: β-地中海贫血症', 'LZ0003_201908133787.png症状为: β-地中海贫血症', 'LZ0004_201908132201.png症状为: β-地中海贫血症', 'LZ0005_201908138806.png症状为: β-地中海贫血症', 'LZ0006_20190
8131667.png症状为: 正常', 'LZ0006_201908138793.png症状为: β-地中海贫血症', 'LZ0007_201908155793.png症状为: β-地中海贫血症', 'LZ0009_201908155881.png症状为: β-地中海贫血症', 'LZ0011_2
01908152821.png症状为: β-地中海贫血症', 'LZ0012_201908158807.png症状为: β-地中海贫血症', 'lz0013_201908159035.png症状为: β-地中海贫血症', 'lz0015_201908154389.png症状为: β-地中海贫
血症', 'lz0016_201908179710.png症状为: β-地中海贫血症', 'lz0017_201908173787.png症状为: β-地中海贫血症', 'lz0018_201908174744.png症状为: β-地中海贫血症', 'lz0019_201908173179.png症状
为: β-地中海贫血症', 'LZ001B_201908242839.png症状为: β-地中海贫血症', 'LZ001C_201908247612.png症状为: β-地中海贫血症', 'lz0020_201908173281.png症状为: β-地中海贫血症', 'Lz0021_20190
8176504.png症状为: β-地中海贫血症', 'lz0022_201908177665.png症状为: β-地中海贫血症', 'lz0023_201908178524.png症状为: β-地中海贫血症', 'lz0024_201908179754.png症状为: β-地中海贫血症'
, 'lz0025_201908177996.png症状为: β-地中海贫血症', 'LZ0026_201908201525.png症状为: β-地中海贫血症', 'LZ0027_201908205610.png症状为: β-地中海贫血症', 'lz0028_201908203638.png症状为:
β-地中海贫血症', 'lz0029_201908207163.png症状为: β-地中海贫血症', 'LZ002B_201908248302.png症状为: β-地中海贫血症', 'LZ002C_201908246284.png症状为: β-地中海贫血症', 'LZ0030_201908208
745.png症状为: β-地中海贫血症', 'lz0031_201908207635.png症状为: β-地中海贫血症', 'lz0032_201908208728.png症状为: β-地中海贫血症', 'lz0033_201908209739.png症状为: β-地中海贫血症', 'L
Z0034_201908201503.png症状为: β-地中海贫血症', 'LZ0035_201908223463.png症状为: 正常', 'LZ0036_201908225570.png症状为: β-地中海贫血症', 'LZ0037_201908229012.png症状为: β-地中海贫血症'
, 'LZ003B_201908285721.png症状为: β-地中海贫血症', 'LZ003C_201908286511.png症状为: β-地中海贫血症', 'LZ004B_201908317421.png症状为: β-地中海贫血症', 'LZ004C_201908314198.png症状为:
正常', 'lz005b_201908317376.png症状为: β-地中海贫血症', 'LZ005C_201908314597.png症状为: β-地中海贫血症']
β-地中海贫血症', 'LZ002B_201908248302.png症状为: β-地中海贫血症', 'LZ002C_201908246284.png症状为: β-地中海贫血症', 'LZ0030_201908208745.png症状
为: β-地中海贫血症', 'lz0031_201908207635.png症状为: β-地中海贫血症', 'lz0032_201908208728.png症状为: β-地中海贫血症', 'lz0033_201908209739.png
症状为: β-地中海贫血症', 'LZ0034_201908201503.png症状为: β-地中海贫血症', 'LZ0035_201908223463.png症状为: 正常', 'LZ0036_201908225570.png症状为:
β-地中海贫血症', 'LZ0037_201908229012.png症状为: β-地中海贫血症', 'LZ003B_201908285721.png症状为: β-地中海贫血症', 'LZ003C_201908286511.png症状
为: β-地中海贫血症', 'LZ004B_201908317421.png症状为: β-地中海贫血症', 'LZ004C_201908314198.png症状为: 正常', 'lz005b_201908317376.png症状为: β-
地中海贫血症', 'LZ005C_201908314597.png症状为: β-地中海贫血症']
![](https://gw.alipayobjects.com/os/lib/twemoji/11.2.0/2/svg/2753.svg#align=left&display=inline&height=18&margin=%5Bobject%20Object%5D&originHeight=150&originWidth=150&status=done&style=none&width=18)但要保证正常人时没有问题,有必要用正常人吗?医生应该只会输入异常病例。
词向量的训练语料和wordnet是否包含中文的表型名。
词向量是英文的