DTA随笔4

2023-12-02 22:48
文章标签 随笔 dta

本文主要是介绍DTA随笔4,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

run_experiments.py

  1. XD = np.asarray(XD)

array和asarray都可将结构数据转换为ndarray类型。
但是主要区别就是当数据源是ndarray时,array仍会copy出一个副本,占用新的内存,但asarray不会

例1:当数据源是list时,array和asarray都对原数据进行了复制。

import numpy as np  data = [1,1,1]  
arr2 = np.array(data)  
arr3 = np.asarray(data)  
data[1] = 2  
print('data:', data)
print('arr2:', arr2) 
print('arr3:', arr3)

输出:
data: [1, 2, 1]
arr2: [1 1 1]
arr3: [1 1 1]

例2:当数据源是ndarray时,array对原数据进行了复制,而asarray没有。

import numpy as np  data = np.ones(3)  
arr2 = np.array(data)  
arr3 = np.asarray(data)  
data[1] = 2  
print('data:', data)  
print('arr2:', arr2)  
print('arr3:', arr3) 

输出:
data: [1. 2. 1.]
arr2: [1. 1. 1.]
arr3: [1. 2. 1.]

例3:针对项目中的代码,不管怎么改XD中的Xi,XD只会一直是第一次的数据不会变。
XD = [ X1, X2, X3, … ]
XD是一个列表,其中每一个元素X都是一个一维(有标签)/多维(没标签)的矩阵

import numpy as npa = np.array([1,2,3])
b = np.array([4,5,6])
c = np.array([7,8,9])
X = [a,b,c]
XD = np.asarray(X)
print('a:', a)
print('X:', X)
print('XD:', XD)
print()a[1] = 99
print('a\':', a)
print('X\':', X)
print('XD\':', XD)

输出:
a: [1 2 3]
X: [array([1, 2, 3]), array([4, 5, 6]), array([7, 8, 9])]
XD: [[1 2 3]
[4 5 6]
[7 8 9]]

a’: [ 1 99 3]
X’: [array([ 1, 99, 3]), array([4, 5, 6]), array([7, 8, 9])]
XD’: [[1 2 3]
[4 5 6]
[7 8 9]]


  1. drugcount = XD.shape[0]

对于numpy中shape;
二维情况:

import numpy as npa = np.array([1,2,3])
b = np.array([4,5,6])
XD = [a,b]
XD = np.asarray(XD)
print('XD:', XD)
print('XD_shape:',XD.shape)
print('XD_shape[0]:',XD.shape[0])
print('XD_shape[1]:',XD.shape[1])

输出:
XD: [[1 2 3]
[4 5 6]]
XD_shape: (2, 3)
XD_shape[0]: 2
XD_shape[1]: 3


  1. label_row_inds, label_col_inds = np.where(np.isnan(Y) == False)
import numpy as npa = np.array([1,np.nan,3])
b = np.array([4,5,np.nan])
XD = [a,b]
XD = np.asarray(XD)
print('XD:\n', XD)
x, y = np.where(np.isnan(XD) == False)
print('x: ', x)
print('y: ', y)

输出:
XD:
[[ 1. nan 3.]
[ 4. 5. nan]]
x: [0 0 1 1]
y: [0 2 0 1]

分析:
以(x,y)表示矩阵中行列,那么矩阵XD中为空值的地方有2处——(0,1)(1,2),其余地方(0,0)(0,2)(1,0)(1,1)都是有值的。
输出的x,y是纵向看坐标点的。


  1. XDinput = Input(shape=(FLAGS.max_smi_len,), dtype='int32')

tf.keras.Input函数:用来实例化一个keras张量,用于向模型中输入数据,并指定数据的形状、数据类型等信息。

Input(shape=None,batch_shape=None,name=None,dtype=K.floatx(),sparse=False,tensor=None
)

参数:
(1)shape: 形状元组(整型),不包括batch size。
例:

import numpy as np
a = np.array([1,2,3])  # 1个3维向量
print(a.shape)

输出:(3,)

(2)batch_shape: 形状元组(整型),包括了batch size。例如,batch_shape=(10,32)表示了预期的输入将是10个32维向量。

(3)name: 对于该层是可选的名字字符串。在一个模型中是独一无二的(同一个名字不能复用2次)。如果没有name,系统会自动生成特指的name。

(4)dtype: 预期的输入数据类型。

(5)sparse: 特定的布尔值,占位符是否为sparse(稀疏)。

(6)tensor: 可选的、存在的向量包装到Input层,如果设置了,该层将不会创建一个占位张量。

返回值: 一个张量
在这里插入图片描述

# this is a logistic regression in Keras
x = Input(shape=(32,))
y = Dense(16, activation='softmax')(x)
model = Model(x, y)

  1. encode_smiles = Embedding(input_dim=FLAGS.charsmiset_size + 1, output_dim=128, input_length=FLAGS.max_smi_len)(XDinput)

kears Embedding()函数嵌入层

keras.layers.embeddings.Embedding( input_dim, output_dim, embeddings_initializer='uniform',embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None
)

作用:将正整数(下标)转换为固定尺寸的稠密向量。 例如: [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]。Embedding层只能作为模型的第一层

参数
(1)input_dim:大或0的整数,字典长度,即输入数据最大下标+1,就是矩阵中的最大值。
(2)output_dim:大于0的整数,代表全连接嵌入的维度。
(3)embeddings_initializer: 嵌入矩阵的初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
(4)embeddings_regularizer: 嵌入矩阵的正则项,为Regularizer对象
(5)embeddings_constraint: 嵌入矩阵的约束项,为Constraints对象
(6)mask_zero:布尔值,确定是否将输入中的‘0’看作是应该被忽略的‘填充’(padding)值,该参数在使用递归层处理变长输入时有用。设置为True的话,模型中后续的层必须都支持masking,否则会抛出异常。如果该值为True,则下标0在字典中不可用,input_dim应设置为|vocabulary| + 2。
(7)input_length:当输入序列的长度固定时,该值为其长度。如果要在该层后接Flatten层,然后接Dense层,则必须指定该参数,否则Dense层的输出维度无法自动推断。


  1. encode_smiles = Conv1D(filters=NUM_FILTERS, kernel_size=FILTER_LENGTH1, activation='relu', padding='valid', strides=1)(encode_smiles)

作用:该层是一维卷积层,对层输入进行卷积, 以生成输出张量。

参数
(1)filters:滤波器的数量。整数,输出空间的维度 (即卷积中滤波器的输出数量)。
(2)kernel_size:一个整数,核数量。
(3)activation:使用的激活函数,若不指定,则不使用激活函数 (即线性激活: a(x) = x)。
(4)padding:“valid” 或 “same” (大小写敏感)。
(5)strides:一个整数,卷积的步长。


  1. encode_interaction = keras.layers.concatenate([encode_smiles, encode_protein], axis=-1)

keras.layers.concatenate([t1,t2], axis=-1)拼接函数:
参数
(1)[t1,t2]: t1,t2是需要拼接的变量
(2)axis: 相接的轴

import numpy as np
import keras.backend as K
import tensorflow as tft1 = K.variable(np.array([[[1, 2],[2,3]],[[4,4], [5,3]]]))
t2 = K.variable(np.array([[[7, 4],[8,4]],[[2,10],[15,11]]]))d0 = K.concatenate([t1,t2], axis=0)
d1 = K.concatenate([t1,t2], axis=1)
d2 = K.concatenate([t1,t2], axis=2)
d3 = K.concatenate([t1,t2], axis=-1)init = tf.global_variables_initializer()
with tf.Session() as sess:sess.run(init)print('t1:\n',sess.run(t1))print('\nt2:\n',sess.run(t2))print('\nd0:\n',sess.run(d0))print('\nd1:\n',sess.run(d1))print('\nd2:\n',sess.run(d2))print('\nd3:\n',sess.run(d3))

输出

t1:[[[1. 2.][2. 3.]][[4. 4.][5. 3.]]]t2:[[[ 7.  4.][ 8.  4.]][[ 2. 10.][15. 11.]]]d0:[[[ 1.  2.][ 2.  3.]][[ 4.  4.][ 5.  3.]][[ 7.  4.][ 8.  4.]][[ 2. 10.][15. 11.]]]d1:[[[ 1.  2.][ 2.  3.][ 7.  4.][ 8.  4.]][[ 4.  4.][ 5.  3.][ 2. 10.][15. 11.]]]d2:[[[ 1.  2.  7.  4.][ 2.  3.  8.  4.]][[ 4.  4.  2. 10.][ 5.  3. 15. 11.]]]d3:[[[ 1.  2.  7.  4.][ 2.  3.  8.  4.]][[ 4.  4.  2. 10.][ 5.  3. 15. 11.]]]

  1. FC1 = Dense(1024, activation='relu')(encode_interaction)

kears Dense()函数–全连接层

keras.layers.core.Dense ( units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None  )

参数
(1)units:大于0的整数,代表该层的输出维度。
(2)activation:激活函数,为预定义的激活函数名(参考激活函数),或逐元素(element-wise)的Theano函数。如果不指定该参数,将不会使用任何激活函数(即使用线性激活函数:a(x)=x)
(3)use_bias: 布尔值,是否使用偏置项
(4)kernel_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
(5)bias_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
(6)kernel_regularizer:施加在权重上的正则项,为Regularizer对象
(7)bias_regularizer:施加在偏置向量上的正则项,为Regularizer对象
(8)activity_regularizer:施加在输出上的正则项,为Regularizer对象
(9)kernel_constraints:施加在权重上的约束项,为Constraints对象
(10)bias_constraints:施加在偏置上的约束项,为Constraints对象
(11)input_dim:可以指定输入数据的维度


  1. interactionModel.compile(optimizer='adam', loss='mean_squared_error', metrics=[cindex_score])

kears model.compile()函数–配置模型

model.compile(optimizer, loss, metrics=None, sample_weight_mode=None
)

编译用来配置模型的学习过程,其参数有:
(1)optimizer:字符串(预定义优化器名)或优化器对象,参考优化器
(2)loss:字符串(预定义损失函数名)或目标函数,参考损失函数
(3)metrics:列表,包含评估模型在训练和测试时的网络性能的指标,典型用法是metrics=[‘accuracy’]
(4)sample_weight_mode:如果你需要按时间步为样本赋权(2D权矩阵),将该值设为“temporal”。默认为“None”,代表按样本赋权(1D权)。在下面fit函数的解释中有相关的参考内容。


  1. print(interactionModel.summary())

使用keras构建深度学习模型,我们会通过model.summary()输出模型各层的参数状况,如下:

________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_4 (Dense)              (None, 7)                 35        
_________________________________________________________________
activation_4 (Activation)    (None, 7)                 0         
_________________________________________________________________
dense_5 (Dense)              (None, 13)                104       
_________________________________________________________________
activation_5 (Activation)    (None, 13)                0         
_________________________________________________________________
dense_6 (Dense)              (None, 5)                 70        
_________________________________________________________________
activation_6 (Activation)    (None, 5)                 0         
=================================================================
Total params: 209
Trainable params: 209
Non-trainable params: 0
_________________________________________________________________

  1. otherfoldsinds = [item for sublist in otherfolds for item in sublist]
sentences=[y for x in sentences for y in x]

等价于:

for x in sentences:for y in x:

即:子列表中项目的子列表项目。

例1:将列表展平

>>> vec = [[1,2,3],[4,5,6],[7,8,9]]
>>> [num for elem in vec for num in elem]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

例2

>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

等价于:

>>> combs = []
>>> for x in [1,2,3]:for y in [3,1,4]:if x!=y:combs.append((x,y))>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

  1. numpy.stack(arrays, axis=0)

沿着新轴连接数组的序列。
axis参数指定新轴在结果尺寸中的索引。例如,如果axis=0,它将是第一个维度,如果axis=-1,它将是最后一个维度。

参数: 数组:array_like的序列每个数组必须具有相同的形状。axis:int,可选输入数组沿其堆叠的结果数组中的轴。
返回: 堆叠:ndarray堆叠数组比输入数组多一个维。

>>> a = np.array([1, 2, 3])
>>> b = np.array([2, 3, 4])
>>> a.shape
(3,)
>>> b.shape
(3,)
>>> np.stack((a, b), axis=0).shape
(2, 3)
>>> np.stack((a, b), axis=1).shape
(3, 2)

  1. es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=15)

EarlyStopping则是用于提前停止训练的callbacks。具体地,可以达到当训练集上的loss不在减小(即减小的程度小于某个阈值)的时候停止继续训练。
即防止过度拟合。

参数
(1)monitor: 监控的数据接口,有’acc’,’val_acc’,’loss’,’val_loss’等等。正常情况下如果有验证集,就用’val_acc’或者’val_loss’。但是因为笔者用的是5折交叉验证,没有单设验证集,所以只能用’acc’了。
(2)min_delta:增大或减小的阈值,只有大于这个部分才算作improvement。这个值的大小取决于monitor,也反映了你的容忍程度。例如笔者的monitor是’acc’,同时其变化范围在70%-90%之间,所以对于小于0.01%的变化不关心。加上观察到训练过程中存在抖动的情况(即先下降后上升),所以适当增大容忍程度,最终设为0.003%。
(3)patience:能够容忍多少个epoch内都没有improvement。这个设置其实是在抖动和真正的准确率下降之间做tradeoff。如果patience设的大,那么最终得到的准确率要略低于模型可以达到的最高准确率。如果patience设的小,那么模型很可能在前期抖动,还在全图搜索的阶段就停止了,准确率一般很差。patience的大小和learning rate直接相关。在learning rate设定的情况下,前期先训练几次观察抖动的epoch number,比其稍大些设置patience。在learning rate变化的情况下,建议要略小于最大的抖动epoch number。笔者在引入EarlyStopping之前就已经得到可以接受的结果了,EarlyStopping算是锦上添花,所以patience设的比较高,设为抖动epoch number的最大值。
(4)mode: 就’auto’, ‘min’, ‘,max’三个可能。如果知道是要上升还是下降,建议设置一下。笔者的monitor是’acc’,所以mode=’max’。

min_delta和patience都和“避免模型停止在抖动过程中”有关系,所以调节的时候需要互相协调。通常情况下,min_delta降低,那么patience可以适当减少;min_delta增加,那么patience需要适当延长;反之亦然。


  1. Keras model.fit() 函数
    见Keras model.fit() 函数

这篇关于DTA随笔4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/447127

相关文章

【 Android 应用开发随笔】-- PackageInstaller.SessionCallback

PackageInstaller.SessionCallback 是 Android 开发中的一个接口,用于在应用程序安装过程中接收安装状态的回调。这个接口属于 android.content.pm.PackageInstaller 类,主要用于处理通过 PackageInstaller 类进行的包安装。 主要功能 ◾ 安装进度通知: PackageInstaller.SessionCal

程序员的自我修养--术语随笔

PLT PLT(Procedure Linkage Table)是用于动态链接共享库中函数调用的一种数据结构,它在程序运行时起着至关重要的作用。下面是对 PLT 的详细解释:作用: PLT 主要用于实现库函数的延迟绑定(dynamic binding)。它负责将程序中对共享库中函数的调用映射到最终的共享库函数的地址上,并且支持共享库的重定位。 实现原理: 当一个程序调用共享库中的函数时,对应的

强化学习实操入门随笔

碎碎念:经过思考,打通底层逻辑,我认为未来ai的功能是在沟通领域代替人,未来人-人模式(媒介是死的语言,比如看古人留下的文字、聊天的暂时不在)会变成人-ai替身-人模式(符合本人想法的“预测个性化语言”)。由于沟通越来越虚拟化和低成本,以及各种模态(比如视频链接)的数字媒介比见面聊天效率更高,所以制作人的各种在虚拟数字空间的“替身”(模仿聊天、总结信息等秘书类事务)是很可能出现的重点问题。

周末随笔 | 笔耕者的悲哀 —— 盗亦无道

欢迎跳转到本文的原文链接:https://honeypps.com/talk/the-thief-has-no-way/ 今天所要说的不是技术,而是盗版这个现象。对于技术公众号来说,很少会写一些技术之外的东西。而且写一些实事类的东西对触碰到一部分人的利益,更有甚者会被“安排”。 对于盗版,我其实已经习惯了,也早已习惯地采取“鸵鸟策略”来应对。不过昨天发生的一件事情确实有点让人寒心。 前天我的

第三章 操作符读书随笔

1、 赋值运算符“=”:     对于基本类型来说,是把基本类型的实际内容赋给了左边的变量。     对于对象类型来说,是把对象的引用赋给了左边的变量。不同的变量可以引用同一个对象的引用,从而指向同一个对象。 2、整数除法“/”     进行除法的时候,只获取整数部分,不会四舍五入。 3、逻辑比较运算符“==”     逻辑等于运算符,比较的是对象的引用,一般情况下会根据equals方

随笔十、音频扩展模块测试

本项测试简单,对购买的音频扩展模块进行录音放音测试 按照使用说明,连接音频小板,一个喇叭一个麦克风,4根线,buildroot系统镜像 录音测试 root@RK356X:/# arecord -c 1 -r 44100 -f S16_LE /tmp/record.wav Recording WAVE '/tmp/record.wav' : Signed 16 bit Little En

随笔1:数学建模与数值计算

目录 1.1 矩阵运算 1.2 基本数学函数 1.3 数值求解 数学建模与数值计算 是将实际问题通过数学公式和模型进行描述,并通过计算获得模型解的过程。这是数学建模中最基本也是最重要的环节之一。下面是详细的知识点讲解及相应的MATLAB代码示例。 1.1 矩阵运算 知识点讲解: 在数学建模中,矩阵运算是非常基础且重要的工具。许多实际问题可以通过矩阵来表示,例如线性方程

2024年8月总结及随笔之逝

1. 回头看 日更坚持了609天。 读《零信任网络:在不可信网络中构建安全系统》更新完成读《软件开发安全之道:概率、设计与实施》开更并持续更新 2023年至2024年8月底累计码字1463007字,累计日均码字2402字。 2024年8月码字109278字,同比增长177.6%,环比增长27.3%,日均码字数3525字,累计码字745044字,累积日均码字3053字。 读完以下这些书

随笔九、SARADC按键程控测试

目录 1. 泰山派环境 2. 按键3分析 3. 编程测试 1. 泰山派环境 泰山派开发板上有3个按键 按键1是电源按键PWRON,实测按几下会导致开发板重启 按键2是复位按键RESET,按下立马复位重启 按键3是升级按键RECOVER,配合RESET按键可以使开发板进入Loader 烧写模式 一般来说开发板都会给用户提供一个用户按键,看样子泰山派用户按键是需要自己用G

随笔八、LED-RGB灯程控测试

目录 1. 泰山派环境 2. 编程控制 1. 泰山派环境 泰山派开发板上有一颗RGB三色LED灯,烧写官方镜像上电后开始闪烁,表示系统已经正常运行。可以在设备树里修改初始状态。 查看电路图知道,RGB是通过GPIO1的B0~B2引脚控制的,低电平点亮。 SDK包含了leds的驱动 root@RK356X:/# ls /sys/class/leds/ mmc0::  rg