Tensorflow实战学习(三十八)【实现估值网络】

Titanic 泰坦尼克号预测-Tensorflow 方法-【Kaggle 比赛】 本文介绍Kaggle入门比赛Titanic泰坦尼克号幸存预测的解题思路,使用的是神经网络和Tensorflow框架。提交代码附在本文的最后部分。 基本思路为: 1.导入数据集 2.对数据预处理 3.训练 4.预测并输出结果............ 阅读详情

Q-Learning,学习Action对应期望值(Expected Utility)。1989年,Watkins提出。收敛性,1992年,Watkins和Dayan共同证明。学习期望价值,从当前一步到所有后续步骤,总期望获取最大价值(Q值、Value)。Action->Q函数,最佳策略,在每个state下,选择Q值最高的Action。不依赖环境模型。有限马尔科夫决策过程(Markov Dectision Process) ,Q-Learning被证明最终可以找到最优策略。

Q-Learning目标,求解函数Q(st,at),根据当前环境状态,估算Action期望价值。Q-Learning训练模型,以(状态、行为、奖励、下一状态)构成元组(st,at,rt+1,st+1)样本训练,st当前状态,at当前状态下执行action,rt+1执行Action后获得奖励,st+1下一状态,(当前状态,行动,奖励,下一状态)。特征(st,at)。学习目标(期望价值) rt+1+γ·maxaQ(st+1,a),当前Action获得Reward,加下一步可获得最大期望价值,当前状态行动奖励,加下一状态行动最大期望价值。学习目标包含Q-Learning函数本身,递归求解。下一步可获最大期望价值乘γ(衰减系数discount factor),未来奖励的学习权重。discount factor 0,模型学习不到任何未来奖励信息,变短视,只关注当前利益。discount factor >= 1,算法可能无法收敛,期望价值不断累加没有衰减(discount),期望价值发散。discount factor一般比1稍小。Qnew(st,at)<-(1-α)·Qold(st,at)+α·(rt+1+γ·maxaQ(st+1,a)),Q-Learning学习过程式子。旧Q-Learning函数Qold(st,at),向学习目标(当前获得Reward加下一步可获得最大期望价值),按较小学习速率α学习,得到新Q-Learning函数Qnew(st,at)。学习速率决定新获取样本信息覆盖率前掌握到信息比率,通常设较小值,保证学习过程稳定,确保最后收敛性。Q-Learning需要初始值Q0,比较高初始值,鼓励模型多探索。

学习Q-Learning模型用神经网络,得到模型是估值网络。用比较深的神经网络,就是DQN。Google DeepMind,《Nature》论文,《Human-level control through deep reinforcement learning》提出。DeepMind用DQN创建达到人类专家水平玩Atari2600系列游戏Agent。

state of the art DQN Trick。第一个Trick。DQN引入卷积层。模型通过Atari游戏视频图像了解环境信息并学习策略。DQN需要理解接收图像,具有图像识别能力。卷积神经网络,利用可提取空间结构信息卷积层抽取特征。卷积层提取图像中重要目标特征传给后层做分类、回归。DQN用卷积层做强化学习训练,根据环境图像输出决策。

第二个Trick。Experience Replay。深度学习需要大量样本,传统Q-Learning online update方法(逐一对新样本学习)不适合DQN。增大样本,多个epoch训练,图像反复利用。Experience Replay,储存Agent Experience样本,每次训练随机抽取部分样本供网络学习。稳定完成学习任务,避免短视只学习最新接触样本,综合反复利用过往大量样本学习。创建储存Experience缓存buffer,储存一定量较新样本。容量满了,用新样本替换最旧样本,保证大部分样本相近概率被抽到。不替换旧样本,训练过程被抽到概率永远比新样本高很多。每次需要训练样本,直接从buffer随机抽取一定量给DQN训练,保持样本高利用率,让模型学习到较新样本。

第三个Trick。用第二个DQN网络辅助训练,target DQN,辅助计算目标Q值,提供学习目标公式里的maxaQ(st+1,a)。两个网络,一个制造学习目标,一个实际训练,让Q-Learning训练目标保持平稳。强化学习 Q-Learning学习目标每次变化,学习目标分部是模型本身输出,每次更新模型参数会导致学习目标变化,更新频繁幅度大,训练过程会非常不稳定、失控,DQN训练会陷入目标Q值与预测Q值反馈循环(陷入震荡发散,难收敛)。需要稳定target DQN辅助网络计算目标Q值。target DQN,低频率、缓慢学习,输出目标Q值波动较小,减小训练过程影响。

第4个Trick。Double DQN。DeepMind 《Deep Reinforcement Learning with Double Q-Learning》。传统DQN高估Action Q值,高估不均匀,导致次优Action被高估超过最优Action。target DQN 负责生成目标Q值,先产生Q(st+1,a),再通过maxa选择最大Q值。Double DQN,在主DQN上通过最大Q值选择Action,再获取Action在target DQN Q值。主网选择Action,targetDQN生成Action Q值。被选择Q值,不一定总是最大,避免被高估次优Action总是超过最优Action,导致发现不了真正最好Action。学习目标公式:Target=rt+1+γ·Qtarget(st+1,argmaxa(Qmain(st+1,a)))。

第5个Trick。Dueling DQN。Google 《Dueling Network Architectures for Deep Reinforcement Learning》。Dueling DQN,Q值函数Q(st,at)拆分,一部分静态环境状态具有价值V(st),Value;另一部分动态选择Action额外带来价值A(at),Advantage。公式,Q(st,at)=V(st)+A(at)。网络分别计算环境Value和选择Action Advantage。Advantage,Action与其他Action比较,零均值。网络最后,不再直接输出Action数量Q值,输出一个Value,及Action数量 Advantage值。V值分别加到每个Advantage值上,得最后结果。让DQN学习目标更明确,如果当前期望价值主要由环境状态决定,Value值大,所有Advantage波动不大;如果期望价值主要由Action决定,Value值小,Advantage波动大。分解让学习目标更稳定、精确,DQN对环境状态估计能力更强。

实现带Trick DQN。任务环境 GridWorld导航类水言纟工。GridWorld包含一个hero,4个goal,2个fire。控制hero移动,每次向上、下、左、右方向移动一步,多触碰goal(奖励值1),避开fire(奖励值-1)。游戏目标,限度步数内拿到最多分数。Agent 直接通过GridWorld图像学习控制hero移动最优策略。

创建GridWorld任务环境。载入依赖库,itertools迭代操作,scipy.misc、matplotlib.pyplot绘图,训练时间长,os定期储存模型文件。

创建环境内物体对象class。环境物体属性,coordinates(x,y坐标)、size(尺寸)、intensity(亮度值)、channel(RGB颜色通道)、reward(奖励值)、name(名称)。

创建GridWorld环境class,初始化方法只传入参数环境size。环境长、宽为输入size,环境Action Space设4,初始化环境物体对象列表。self.reset()方法重置环境,得到初始observation(GridWorld图像),plt.imshow展示observation。

定义环境reset方法。创建所有GridWorld物体,1个hero(用户控制对象)、4个goal(reward 1)、2个fire(reward -1),添加到物体对象列表self.objects。self.newPosition()创建物体位置,随机选择没有被占用新位置。物有物体size、intensity 1,hero channel 2(蓝色),goal channel 1(绿色),fire channel 0(红色)。self.renderEnv()绘制GridWorld图像,state。

实现移动英雄角色方法,传入值0、1、2、3四个数字,分别代表上、下、左、右。函数根据输入操作英雄移动。如果移动该方向会导致英雄出界,不会进行任何移动。

定义newPosition方法,选择一个跟现有物体不冲突位置。itertools.product方法得到几个变量所有组合,创建环境size允许所有位置集合points,获取目前所有物体位置集合currentPositions,从points去掉currentPositions,剩下可用位置。np.random.choice随机抽取一个可用位置返回。

定义checkGoal函数。检查hero是否触碰goal、fire。从objects获取hero,其他物体对象放到others列表。编历others列表,如果物体和坐标与hero完全一致,判定触碰。根据触碰物体销毁,self.newPosition()方法在随机位置重新生成物体,返回物体reward值(goal 1,fire -1)。

创建长宛size+2、颜色通道数 3 图片。初始值全1,代表全白色。最外圈内部像素颜色值全部赋0,代表黑色。遍历物体对象列表self.objects,设置物体亮度值。scipy.misc.imresize将图像从原始大小resize 84x84x3尺寸,正常游戏图像尺寸。

定义GridWorld环境执行一步Action方法。输入参数Action,self.moveChart(action)移动hero位置,self.checkGoal()检测hero是否触碰物体,得到reward、done标记。self.renderEnv获取环境图像state,返回state、reward、done。

调用gameEnv类初始化方法,设置size 5,创建5x5大小GridWorld环境,每次创建GridWorld环境随机生成。小尺寸环境相对容易学习,大尺寸较难,训练时间更长。

设计DQN(Deep Q-Network)网络。使用卷积层,可以直接从环境原始像素学习策略。输入scalarInput,扁平化长为84x84x3=21168向量,恢复成[-1,84,84,3]尺寸图片ImageIn。tf.contrib.layers.convolution2d创建第1个卷积层,卷积核尺寸8x8,步长4x4,输出通道数(filter数量)32,padding模型VALID,bias初始化器空。用4x4步长和VALID模型padding,第1层卷积输出维度20x20x32。第2层卷积尺寸4x4,步长2x2,输出通道数64,输出维度9x9x64。第3层卷积尺寸3x3,步长1x1,输出通道数64,输出维度7x7x64。第4层卷积尺寸7x7,步长1x1,输出通道数512,空间尺寸只允许在一个位置卷积,,输出维度1x1x512。

tf.split(),第4个卷积层输出conv4平均拆分两段,streamAC、streamVC,Dueling DQN Advantage Function(Action带来的价值)和Value Function(环境本身价值)。tf.split函数第2参数代表要拆分成几段。第3参数代表要拆分几个维度。tf.contrib.layers.flatten将streamAC和streamVC转遍平的steamA和steamV。创建streamA和streamV线性全连接层参数AW和VW。tf.random_normal初始化权重,tf.matmul做全连接层矩阵乘法,得到self.Advantage和self.Value。Advantage针对Action,输出数量为Action数量。Value针对环境统一的,输出数量 1。Q值由Value、advantage复合成,Value加上减少均值Advantage。Advantage减去均值操作 tf.subtract,均值计算tf.reduce_mean函数(reduce_indices 1,代表Action数量维度)。最后输出Action,Q值最大Action,tf.argmax。

定义Double DQN目标Q值targetQ输入placeholder,Agent动作actions输入placeholder。计算目标Q值,action由主DQN选择,Q值由辅助target DQN生成。计算预测Q值,scalar形式actions转onehot编码形式,主DQN生成的Qout乘以actions_onehot,得预测Q值(Qout和actions都来自主DQN)。

定义loss,tf.square、tf.reduce_mean计算targetQ和Q均方误差,学习速率1e-4 Adam优化器优化预测Q值和目标Q值偏差。

实现Experience Replay策略。定义experience_buffer class。初始化定义buffer_size存储样本最大容量,创建buffer列表。定义向经buffer添加元素方法。如果超过buffer最大容量,清空最早样本,列表末尾添加新元素。定义样本抽样方法,用random.sample()函数随机抽取一定数量样本。

定义84x84x3 states扁平化 1维向量函数processState,方便后面堆叠样本。

updateTargetGraph函数,更新target DQN模型参数(主DQN用DQN class self.updateModel方法更新模型参数)。输入变量tfVars,TensorFlow Graph全部参数。tau,target DQN向主DQN学习的速率。函数updateTargetGraph取tfVars前一半参数,主DQN模型参数。再令辅助targetDQN参数朝向主DQN参数前进很小比例(tau,0.001),target DQN缓慢学习主DQN。训练时,目标Q值不能在几次迭代间波动太大,训练非常不稳定、失控,陷入目标Q值和预测Q值反馈循环。需要稳定目标Q值训练网络,缓慢学习target DQN网络输出目标Q值,主网络优化目标Q值和预测Q值间loss,target DQN跟随主DQN缓慢学习。函数updateTargetGraph创建更新target DQN模型参数操作,函数updateTarget执行操作。

DQN网络训练过程参数。batch_size,每次从experience buffer获取样本数,32。更新频率update_freq,每隔多少step执行一次模型参数更新,4。Q值衰减系数(discount factor)γ,0.99。startE起始执行随机Action概率。endE最终执行随机Action概率。anneling_steps从初始随机概率降到最终随机概率所需步数。num_episodes总共多少次GridWorld环境试验。pre_train_steps正式用DQN选择Action前进行多少步随机Action测试。max_epLength每个episode进行多少步Action。load_model是否读取之前训练模型。path模型储存路径。h_size是DQN网络最后全连接层隐含节点数。tau是target DQN向主DQN学习速率。

Qnetwork类初始化mainQN和辅助targetQN。初始化所有模型参数。trainables获取所有可训练参数。updateTargetGraph创建更新target DQN模型参数操作。

experience_buffer创建experience replay class,设置当前随机Action概率e,计算e每一步衰减值stepDrop。初始化储存每个episode的reward列表rList,总步数total_steps。创建模型训练保存器(Saver)检查保存目录是否存在。

创建默认Session,如果load_model标志True,检查模型文件路径checkpoint,读取载入已保存模型。执行参数初始化操作,执行更新targetQN模型参数操作。创建GridWorld试验循环,创建每个episode内部experience_buffer,内部buffer不参与当前迭代训练,训练只使用之前episode样本。初始化环境得第一个环境信息s,processState()函数扁平化。初始化默认done标记d、episode内总reward值rAll、episode内步数j。

创建内层循环,每次迭代执行Action。总步数小于pre_train_steps,强制用随机Action,只从随机Action学习,不强化过程。达到pre_train_steps,保留较小概率随机选择Action。不随机选择Action,传入当前状态s给主DQN,预测得到应该执行Action。env.step()执行一步Action,得到接下来状态s1、reward、done标记。processState对s1扁平化处理,s、a、r、s1、d传入episodeBuffer存储。

总步数超过pre_train_steps,持续降低随机选择Action概率e,直到最低值endE。每当总步数达到update_freq整数部,进行一次训练,模型参数更新。从myBuffer中sample出一个batch_size样本。训练样本第3列信息,下一状态s1,传入mainQN,执行main.predict,得到主模型选择Action。s1传入辅助targetQN,得到s1状态下所有Action的Q值。mainQN输出Action ,选择targetQN输出Q,得到doubleQ。两个DQN网络把选择Action和输出Q值两个操作分隔开,Double DQN。训练样本第2列信息,当前reward,加doubleQ乘以衰减系数γ,得到学习目标targetQ。传入当前状态s,学习目标targetQ和实际采取Action,执行updateTarget函数,执行targetQN模型参数更新(缓慢向mainQN学习)。完整完成一次训练过程。每个step结束,累计当前这步获取reward,更新当前状态为下一步试验做准备。如果done标记为True,直接中断episode试验。

episode内部episodeBuffer添加到myBuffer,作以后训练抽样数据集。当前episode reward添加到rList。每25个episode展示平均reward值。每1000个episode或全部训练完成,保存当前模型。

初始200个episode内,完全随机Action的前10000步内,平均可以获得reward在2附近,基础baseline。

训练最后episode输出,平均reward 22,非常大提升。

计算每100个episode平均reward,plt.plot展示reward变化趋势。从第1000个episode开始,reward快速提升,到第4000个episode基本达到高峰,后面进入平台期,提升不大。

    import numpy as np
    import random
    import tensorflow as tf
    import os
    %matplotlib inline
    from gridworld import gameEnv
    env = gameEnv(size=5)
    class Qnetwork():
        def __init__(self,h_size):
            #The network recieves a frame from the game, flattened into an array.
            #It then resizes it and processes it through four convolutional layers.
            self.scalarInput =  tf.placeholder(shape=[None,21168],dtype=tf.float32)
            self.imageIn = tf.reshape(self.scalarInput,shape=[-1,84,84,3])
            self.conv1 = tf.contrib.layers.convolution2d( \
                inputs=self.imageIn,num_outputs=32,kernel_size=[8,8],stride=[4,4],padding='VALID', biases_initializer=None)
            self.conv2 = tf.contrib.layers.convolution2d( \
                inputs=self.conv1,num_outputs=64,kernel_size=[4,4],stride=[2,2],padding='VALID', biases_initializer=None)
            self.conv3 = tf.contrib.layers.convolution2d( \
                inputs=self.conv2,num_outputs=64,kernel_size=[3,3],stride=[1,1],padding='VALID', biases_initializer=None)
            self.conv4 = tf.contrib.layers.convolution2d( \
                inputs=self.conv3,num_outputs=512,kernel_size=[7,7],stride=[1,1],padding='VALID', biases_initializer=None)

            #We take the output from the final convolutional layer and split it into separate advantage and value streams.
            self.streamAC,self.streamVC = tf.split(self.conv4,2,3)
            self.streamA = tf.contrib.layers.flatten(self.streamAC)
            self.streamV = tf.contrib.layers.flatten(self.streamVC)
            self.AW = tf.Variable(tf.random_normal([h_size//2,env.actions]))
            self.VW = tf.Variable(tf.random_normal([h_size//2,1]))
            self.Advantage = tf.matmul(self.streamA,self.AW)
            self.Value = tf.matmul(self.streamV,self.VW)

            #Then combine them together to get our final Q-values.
            self.Qout = self.Value + tf.subtract(self.Advantage,tf.reduce_mean(self.Advantage,reduction_indices=1,keep_dims=True))
            self.predict = tf.argmax(self.Qout,1)

            #Below we obtain the loss by taking the sum of squares difference between the target and prediction Q values.
            self.targetQ = tf.placeholder(shape=[None],dtype=tf.float32)
            self.actions = tf.placeholder(shape=[None],dtype=tf.int32)
            self.actions_onehot = tf.one_hot(self.actions,env.actions,dtype=tf.float32)

            self.Q = tf.reduce_sum(tf.multiply(self.Qout, self.actions_onehot), reduction_indices=1)

            self.td_error = tf.square(self.targetQ - self.Q)
            self.loss = tf.reduce_mean(self.td_error)
            self.trainer = tf.train.AdamOptimizer(learning_rate=0.0001)
            self.updateModel = self.trainer.minimize(self.loss)

    class experience_buffer():
        def __init__(self, buffer_size = 50000):
            self.buffer = []
            self.buffer_size = buffer_size

        def add(self,experience):
            if len(self.buffer) + len(experience) >= self.buffer_size:
                self.buffer[0:(len(experience)+len(self.buffer))-self.buffer_size] = []
            self.buffer.extend(experience)

        def sample(self,size):
            return np.reshape(np.array(random.sample(self.buffer,size)),[size,5])

    def processState(states):
        return np.reshape(states,[21168])

    def updateTargetGraph(tfVars,tau):
        total_vars = len(tfVars)
        op_holder = []
        for idx,var in enumerate(tfVars[0:total_vars//2]):
            op_holder.append(tfVars[idx+total_vars//2].assign((var.value()*tau) + ((1-tau)*tfVars[idx+total_vars//2].value())))
        return op_holder
    def updateTarget(op_holder,sess):
        for op in op_holder:
            sess.run(op)
    batch_size = 32 #How many experiences to use for each training step.
    update_freq = 4 #How often to perform a training step.
    y = .99 #Discount factor on the target Q-values
    startE = 1 #Starting chance of random action
    endE = 0.1 #Final chance of random action
    anneling_steps = 10000. #How many steps of training to reduce startE to endE.
    num_episodes = 10000#How many episodes of game environment to train network with.
    pre_train_steps = 10000 #How many steps of random actions before training begins.
    max_epLength = 50 #The max allowed length of our episode.
    load_model = False #Whether to load a saved model.
    path = "./dqn" #The path to save our model to.
    h_size = 512 #The size of the final convolutional layer before splitting it into Advantage and Value streams.
    tau = 0.001 #Rate to update target network toward primary network
    tf.reset_default_graph()
    mainQN = Qnetwork(h_size)
    targetQN = Qnetwork(h_size)
    init = tf.global_variables_initializer()
    trainables = tf.trainable_variables()
    targetOps = updateTargetGraph(trainables,tau)
    myBuffer = experience_buffer()
    #Set the rate of random action decrease. 
    e = startE
    stepDrop = (startE - endE)/anneling_steps
    #create lists to contain total rewards and steps per episode
    rList = []
    total_steps = 0
    #Make a path for our model to be saved in.
    saver = tf.train.Saver()
    if not os.path.exists(path):
        os.makedirs(path)
    #%%
    with tf.Session() as sess:
        if load_model == True:
            print('Loading Model...')
            ckpt = tf.train.get_checkpoint_state(path)
            saver.restore(sess,ckpt.model_checkpoint_path)
        sess.run(init)
        updateTarget(targetOps,sess) #Set the target network to be equal to the primary network.
        for i in range(num_episodes+1):
            episodeBuffer = experience_buffer()
            #Reset environment and get first new observation
            s = env.reset()
            s = processState(s)
            d = False
            rAll = 0
            j = 0
            #The Q-Network
            while j < max_epLength: #If the agent takes longer than 200 moves to reach either of the blocks, end the trial.
                j+=1
                #Choose an action by greedily (with e chance of random action) from the Q-network
                if np.random.rand(1) < e or total_steps < pre_train_steps:
                    a = np.random.randint(0,4)
                else:
                    a = sess.run(mainQN.predict,feed_dict={mainQN.scalarInput:[s]})[0]
                s1,r,d = env.step(a)
                s1 = processState(s1)
                total_steps += 1
                episodeBuffer.add(np.reshape(np.array([s,a,r,s1,d]),[1,5])) #Save the experience to our episode buffer.

                if total_steps > pre_train_steps:
                    if e > endE:
                        e -= stepDrop

                    if total_steps % (update_freq) == 0:
                        trainBatch = myBuffer.sample(batch_size) #Get a random batch of experiences.
                        #Below we perform the Double-DQN update to the target Q-values
                        A = sess.run(mainQN.predict,feed_dict={mainQN.scalarInput:np.vstack(trainBatch[:,3])})
                        Q = sess.run(targetQN.Qout,feed_dict={targetQN.scalarInput:np.vstack(trainBatch[:,3])})
                        doubleQ = Q[range(batch_size),A]
                        targetQ = trainBatch[:,2] + y*doubleQ
                        #Update the network with our target values.
                        _ = sess.run(mainQN.updateModel, \
                            feed_dict={mainQN.scalarInput:np.vstack(trainBatch[:,0]),mainQN.targetQ:targetQ, mainQN.actions:trainBatch[:,1]})

                        updateTarget(targetOps,sess) #Set the target network to be equal to the primary network.
                rAll += r
                s = s1

                if d == True:
                    break

            #Get all experiences from this episode and discount their rewards.
            myBuffer.add(episodeBuffer.buffer)
            rList.append(rAll)
            #Periodically save the model.
            if i>0 and i % 25 == 0:
                print('episode',i,', average reward of last 25 episode',np.mean(rList[-25:]))
            if i>0 and i % 1000 == 0:
                saver.save(sess,path+'/model-'+str(i)+'.cptk')
                print("Saved Model")            
        saver.save(sess,path+'/model-'+str(i)+'.cptk')
    #%%
    rMat = np.resize(np.array(rList),[len(rList)//100,100])
    rMean = np.average(rMat,1)
    plt.plot(rMean)

参考资料:
《TensorFlow实战》

知识体系结构 知识体系结构 python基础-》机器学习-》机器学习实战+深度学习框架+深度学习 目前的学习方法的话就是----》看看理论以后,跑跑实验,熟悉熟悉代码 常见工程、应用、学习错误 知识体系结构(副) 日常安排 论文研究 知识体系结构 1. 数学基础 2. 计算机基础 3. 计算机语言基础 4. 数据库基础 5. 数字图像处理理论基础 6. 数字图像处理技术基础 7. 医学图像... 阅读详情

相关推荐

知识追踪实战:lstm+ Multi-head Attention注意力机制的学生做题成绩预测实战

知识追踪实战:lstm+ Multi-head Attention注意力机制的学生做题成绩预测实战

2221

tensorflow神经网络进行成绩预测(非时序)

这个预测很简陋,就是用一个人的高数1、2的两个成绩预测线性代数成绩,数据量不大,预测的实际意义也不大。主要是体验下流程,应付下作业。( ̄y▽, ̄)╭ 首先是数据的类型,我们这次拿到的数据是3个班的高数1、2和线性代数的成绩。考虑到一些因素,这里只用前两个班的成绩。数据如下(表头我自己图省事改了改) 这里我只需要总评分和前两个班级的数据,所以 def get_class(T_class, info, num): # 从总的课程(info)里取出指定班级(T_class),将总评的列名改成num in

weixin_44544354的博客 2575

【信息科学与工程学】【审计学】第一篇 招投标领域审计算法02

给定人、事、时、地、物等实体集合V和证据事实集合F, 构建一个概率图模型, 计算任意两个实体/事实之间存在关联关系的概率。:构建一个深度贝叶斯网络, 其中顶层为待推断的心理特征P, 中间层为可观测的行为模式B, 底层为多模态证据E。:基于现场痕迹、行为模式、通讯内容等证据E, 推断嫌疑人的心理特征向量P(如反社会性、冲动性、策划能力)。:对高风险的案件, 自动检索关联当事人、律师涉及的其他历史案件, 形成关联视图。:定义如“当事人-律师-当事人”、“当事人-多案件”等路径, 捕捉隐蔽关联。

weixin_49199313的博客 418

学习笔记TF038:实现估值网络

Q-Learning,学习Action对应期望值(Expected Utility)。1989年,Watkins提出。收敛性,1992年,Watkins和Dayan共同证明。学习期望价值,从当前一步到所有后续步骤,总期望获取最大价值(Q值、Value)。Action->Q函数,最佳策略,在每个state下,选择Q值最高的Action。不依赖环境模型。有限马尔科夫决策过程(Markov Dectisi

利炳根 1232

【信息科学与工程学】【通信工程】【云骨干网】第一百三十三篇 智算中心互联之云骨干网01

传统网络方向(如硬件防火墙、交换机)和安全产品方向(如传统防病毒软件)并未“完全”进入衰退期,但已处于深度转型阶段。市场对基础能力的需求仍在,但技术形态、价值重心和竞争逻辑已发生根本变化。

weixin_49199313的博客 1122

运放电路实战:5分钟搞定加法器与减法器的电路设计与调试(附避坑指南)

本文从实战角度出发,详细讲解了运算放大器加法器与减法器的电路设计与调试方法。针对加法器,重点分析了利用“虚地”特性简化设计和选型要点;对于减法器,则深入剖析了决定精度的核心——电阻匹配问题,并提供了使用电阻网络等提升共模抑制比的实用策略。文章还分享了从仿真到实物焊接的完整流程与常见避坑技巧,帮助电子爱好者快速掌握这两种基础运放电路。

weixin_28323057的博客 464

tensorflow cifar10 分类预测实战

tensflow对cifar10数据集进行分类,准确率86%。

qq_54162982的博客 2344

在VS2019里把JSBSim飞行模型集成到你的C++项目里(附完整配置流程和常见错误解决)

本文详细介绍了如何在Visual Studio 2019中将JSBSim飞行模型集成到C++项目中,包括环境准备、源码编译、项目配置和常见错误解决方案。通过实战技巧和优化建议,帮助开发者高效实现高精度飞行仿真功能,提升开发效率。

weixin_42620202的博客 413

TowardsDataScience 博客中文翻译 2020(八百三十八)

学习开发深度学习模型并不是一件容易完成的任务——尤其是对于那些可能在该领域没有丰富经验的人来说。当开始学习如何在 TensorFlow 中构建 DL 模型时,工作流程通常如下:但是,如果部署或更多的技术模型出现,这种构建模型的格式可能会对您的时间造成负担,而不是资产。Python 的面向对象特性很好地发挥了作用,使它更多地属于后者而不是前者。本教程将分解开发更健壮的模型的工作流程。该模型通过 softmax 层将最后一层的输出映射到概率分布。

龙哥盟 2048

省三医院新门诊大楼网络安全建设项目实施方案

为了响应国家建设数字医疗,构建医联网、医共体的号召,新门诊大楼现有计算机网络,实现各门诊室、药房、医学影像科室及后勤科室的终端数据互通。在互联网出口以三层模式部署两台防火墙,作为连接公网的出口设备;出于等保合规和自身业务安全的考虑,现需要该网络上通过网络安全设备实现安全建设。公网出口防火墙,配置攻击防御策略,防御互联网上的病毒进入内网。公网出口防火墙配置攻击防御策略,防御外网对内网的入侵行为。服务器取得边界防火墙,配置攻击防御策略,入侵防御策略。公网出口防火墙配置入侵防御策略,防御外网对内网发起的D。

m0_63645854的博客 2013

手把手教你用Pico4UE搭建100平米VR大空间:从设备检查、系统升级到地图绘制全流程

本文详细介绍了使用Pico4UE搭建100平米VR大空间的完整流程,包括设备检查、系统升级、地图绘制和性能优化等关键步骤。通过实战案例和专业技术建议,帮助用户高效部署企业级VR解决方案,适用于展厅漫游、工业仿真等多种场景。

weixin_28273593的博客 500

TowardsDataScience 博客中文翻译 2016~2018(二百三十八)

/Python Web framework 是允许开发人员编写 Web 应用程序或服务的包或模块的集合。有了它,开发人员不需要处理像协议、套接字或进程/线程管理这样的底层细节。解释请求(获取表单参数,处理 cookies 和会话,…)产生响应(以 HTML 或其他格式呈现数据,…)持久存储数据(和其他东西)现在,让我们看看最有用和最著名的 Python web 框架,来帮助您进行 web 开发。学习:Python 元组 vs 列表——列表和元组的比较。

龙哥盟 3525

低电压高效率能源管理芯片BQ25570的基本用法及应用电路实例

BQ25570是一款低电压、高效率、集成了可编程功率追踪(MPPT)功能、BOOST升压功能和BUCK降压功能的综合型能源管理电路。冷启动工作电压为330mV,热启动工作电压为100mV。主要应用于温差发电片TEG、压电、摩擦发电和太阳能板的能量收集,也可以用于人体可穿戴自取能传感设备的能量管理。本文主要介绍了BQ25570相关参数计算、MPPT功能验证、工作逻辑和应用场景,并设计了一版测试电路,给出了不同应用需求的电路配置建议。

weixin_49213602的博客 3450

用 TensorFlow 做个聊天机器人

上一次提到了不错的学习聊天机器人的资源,不知道小伙伴们有没有去学习呢。 自己动手做聊天机器人教程 我最近每天都会学一点,拿出解读来和大家分享一下。本文结构: 聊天机器人的架构简图 用 TensorFlow 实现 Chatbot 的模型 如何准备 chatbot 的训练数据 Chatbot 源码解读 1. 聊天机器人的架构简图学习资源: [自己动手做聊天机器人 九-聊天机器人应该怎么做] (h

aliceyangxi1987的博客 3万+

产品必备技能(十):如何绘制原型图?先要绘制页面流程图+页面原型图!附实操原型图、流程图实例(抖音)

文章目录目标题目实操步骤模板实操【抖音】APP的视频发布功能页面流程绘制页面流程图合格标准绘制页面原型图合格标准 目标 新入行的产品经理都对原型抱有向往的心境,但是有经验的产品经理不会一上来就画原型,而是先画页面流程再来画原型。通过学习,你将学会如何用页面流程图规划用户行为路径、如何借助原型识别问题、减少风险、有效沟通。 题目 任意选择一款你喜欢的产品,体验某个功能,下载并梳理此功能至少5个以上的页面流程跳转点(后面会解释),还原2 - 3个主要界面的低保真原型图。 实操步骤 可使用手绘以及Process

汪雯琦的博客 4830

强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解

强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解

丨汀、的博客 511

KDNuggets 博客中文翻译(二百三十八)

时间序列分类是许多精彩应用场景中一个非常有趣的话题。在本文中,我们展示了如何使用合成数据来训练 AI 模型(具有几个全连接层的深度学习网络)用于模拟工业过程或传感器流的单维时间序列数据。特别是,我们专注于教会 AI 模型各种异常特征和数据漂移模式,因为这些分类是机器降解的重要指标。简而言之,它们构成了所谓的预测分析在工业 4.0或智能制造领域的基础。我们希望未来 AI 驱动的预测分析中对合成数据的使用会显著增长。你可以查看作者的GitHub。

龙哥盟 1006

【Network Management】AUTOSAR局部网络管理从0到1配置实践

AUTOSAR局部网络管理从0到1配置实践

qq_36056498的博客 2913

TensorFlow 聊天机器人

上一次提到了不错的学习聊天机器人的资源,不知道小伙伴们有没有去学习呢。 自己动手做聊天机器人教程 我最近每天都会学一点,拿出解读来和大家分享一下。 本文结构: 聊天机器人的架构简图 用 TensorFlow 实现 Chatbot 的模型 如何准备 chatbot 的训练数据 Chatbot 源码解读 1. 聊天机器人的架构简图

MachineLP的专栏 6861

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

深度学习好资源

一、深度学习 深度学习(七十三)pytorch学习笔记 深度学习(七十二)tensorflow 集群训练 深度学习(七十一)3D CNN时空特征学习 深度学习(七十)darknet 实现实验mobilenet 深度学习(六十九)darknet 实现实验 Compressing Deep Neural Networks with Pruning, Trained Quantization ...

女王の专属领地 1709

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

StructBERT在医疗问诊系统中的应用:症状描述语义匹配实战

本文介绍了如何在星图GPU平台上自动化部署📚 StructBERT 中文语义智能匹配系统镜像,并展示了其在医疗问诊场景中的核心应用。该技术能够精准理解患者口语化症状描述(如“头晕目眩”)与标准医学术语(如“眩晕”)之间的语义关联,实现智能、高效的症状匹配,从而提升在线问诊系统的准确性与效率。

weixin_42591908的博客 757

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

hjimce算法类博文目录

版权声明:本文为博主原创文章,欢迎转载,转载请注明原文地址、作者信息。https://blog.youkuaiyun.com/hjimce/article/details/50573444 hjimce算法类博文目录个人博客:http://blog....

Mingx9527 265

Gemma 4端侧AI实战指南:断网可用、隐私闭环的本地大模型

端侧大模型是指无需联网即可在手机等终端设备上直接运行的轻量化人工智能模型,其核心原理在于模型压缩、混合稀疏注意力与逐通道INT4量化等关键技术突破,显著降低内存占用与功耗。这类模型的技术价值在于实现真正的隐私闭环与离线可用性,规避云端传输风险,满足医疗、法律、政务等高敏场景需求。典型应用场景包括无网环境下的文档翻译、合同审阅、医疗报告解读、多模态识图及本地化知识问答。Gemma 4作为当前落地最成熟的端侧AI代表,以断网可用和开箱即用为设计原点,标志着大模型从‘云依赖服务’向‘设备原生能力’的关键演进。

775
上一篇: Tensorflow实战学习(三十七)【实现强化学习策略网络】
下一篇: Tensorflow实战学习(三十九)【TensorBoard】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值