这一节告诉你如何用TensorFlow实现全连接网络。

安装 DeepChem

这一节,你将使用DeepChem 机器学习工具链进行实验在网上可以找到 DeepChem详细安装指导。

Tox21 Dataset

作为我们的建模案例研究,我们使用化学数据库。毒理学家很感兴趣于用机器学习来预测化学物是有毒。这个任务很复杂,因为令天的科学对代谢过程了解得很少。但是,生物学家和化学家用有限的实验来提示毒性。如果一个化学物命中这个实验之一,它很可能对人类有毒。但是这些实验成本很高。所以数据学家构建机器学习模型来预测新化合物的结果。

一个重要的毒理学数据集是Tox21。我们分析 Tox21里的其中一个数据集。这个数据集有 10,000个化学物与雄激素受体的相互作有用。数据科学家需要预测新化合物是否与雄激素受体有相互作用。处理数据集很有技巧,所有要用DeepChem里的MoleculeNet 数据集。 Each molecule in Tox21里的分子被DeepChem处理为长度为1024的位-向量。简单的调用DeepChem来加载数据集 (Example 4-1).

Example 4-1. Load the Tox21 dataset

import deepchem as dc

_, (train, valid, test), _ = dc.molnet.load_tox21()

train_X, train_y, train_w = train.X, train.y, train.w

valid_X, valid_y, valid_w = valid.X, valid.y, valid.w

test_X, test_y, test_w = test.X, test.y, test.w

这里 X是处理过的特征向量, y 是标签w 是权重。标签是 1/0 表示是否与雄激素交互。 Tox21 存贮不平衡数据集,正样本数少于负样本数。所有的变量为NumPy 数组。Tox21有很多数据集我们不需要在这里分析,所以我们要去除这相关的数据集的标签。 (Example 4-2).

Example 4-2. Remove extra datasets from Tox21

# Remove extra tasks

train_y = train_y[:, 0]

valid_y = valid_y[:, 0]

test_y = test_y[:, 0]

train_w = train_w[:, 0]

valid_w = valid_w[:, 0]

test_w = test_w[:, 0]

接收Minibatches为Placeholders

(Example 4-3).

Example 4-3. Defining placeholders that accept minibatches of different sizes

d = 1024

with tf.name_scope("placeholders"):

x = tf.placeholder(tf.float32, (None, d))

y = tf.placeholder(tf.float32, (None,))

Note d is 1024, the dimensionality of our feature vectors.

实现隐藏层

 Example 4-4.

Example 4-4. Defining a hidden layer

with tf.name_scope("hidden-layer"):

W = tf.Variable(tf.random_normal((d, n_hidden)))

b = tf.Variable(tf.random_normal((n_hidden,)))

x_hidden = tf.nn.relu(tf.matmul(x, W) + b)

我们使用 tf.nn.relu激活函数。其它代码与逻辑回归的代码相似。

 Example 4-5.

Example 4-5. Defining the fully connected architecture

with tf.name_scope("placeholders"):

x = tf.placeholder(tf.float32, (None, d))

y = tf.placeholder(tf.float32, (None,))

with tf.name_scope("hidden-layer"):

W = tf.Variable(tf.random_normal((d, n_hidden)))

b = tf.Variable(tf.random_normal((n_hidden,)))

x_hidden = tf.nn.relu(tf.matmul(x, W) + b)

with tf.name_scope("output"):

W = tf.Variable(tf.random_normal((n_hidden, 1)))

b = tf.Variable(tf.random_normal((1,)))

y_logit = tf.matmul(x_hidden, W) + b

# the sigmoid gives the class probability of 1

y_one_prob = tf.sigmoid(y_logit)

# Rounding P(y=1) will give the correct prediction.

y_pred = tf.round(y_one_prob)

with tf.name_scope("loss"):

# Compute the cross-entropy term for each datapoint

y_expand = tf.expand_dims(y, 1)

entropy = tf.nn.sigmoid_cross_entropy_with_logits(logits=y_logit, labels=y_expand)

# Sum all contributions

l = tf.reduce_sum(entropy)

with tf.name_scope("optim"):

train_op = tf.train.AdamOptimizer(learning_rate).minimize(l)

with tf.name_scope("summaries"):

tf.summary.scalar("loss", l)

merged = tf.summary.merge_all()

添加Dropout到隐藏层

TensorFlow 使用tf.nn.dropout(x, keep_prob)为我们实现dropout,其中 keep_prob 是节点保留的概率。记住在训练时打开dropout,预测时关闭dropout Example 4-6.

Example 4-6. Add a placeholder for dropout probability

keep_prob = tf.placeholder(tf.float32)

在训练时我们传递希望的值,通常 0.5,测试时我们设置keep_prob 1.0 因为我们要用学习过的节点进行预测。添加dropout到全连接网络只需要额外的一行代码。(Example 4-7).

Example 4-7. Defining a hidden layer with dropout

with tf.name_scope("hidden-layer"):

W = tf.Variable(tf.random_normal((d, n_hidden)))

b = tf.Variable(tf.random_normal((n_hidden,)))

x_hidden = tf.nn.relu(tf.matmul(x, W) + b)

# Apply dropout

x_hidden = tf.nn.dropout(x_hidden, keep_prob)

实施Minibatching

我们用NumPy数组切片实现 (Example 4-8).

Example 4-8. Training on minibatches

step = 0

for epoch in range(n_epochs):

pos = 0

while pos < N:

batch_X = train_X[pos:pos+batch_size]

batch_y = train_y[pos:pos+batch_size]

feed_dict = {x: batch_X, y: batch_y, keep_prob: dropout_prob}

_, summary, loss = sess.run([train_op, merged, l], feed_dict=feed_dict)

print("epoch %d, step %d, loss: %f" % (epoch, step, loss))

train_writer.add_summary(summary, step)

step += 1

pos += batch_size

评估模型的准确性Evaluating Model Accuracy

我们要用验证集来测量准确性。但是不平衡数据需要点技巧。我们的数据集里有 95% 有数据标签为0 只有 5% 的标签为1。结果所有的0 模型将有95%准确率!这不是我们想要的。更好的选择是增加正样本的权重。计算加权的准确性,我们使用 accuracy_score(true,

pred, sample_weight=given_sample_weight) 来自sklearn.metrics。这个函数的关键参数是sample_weight,让我们指明希望的权重(Example 4-9).

Example 4-9. Computing a weighted accuracy

train_weighted_score = accuracy_score(train_y, train_y_pred, sample_weight=train_w)

print("Train Weighted Classification Accuracy: %f" % train_weighted_score)

valid_weighted_score = accuracy_score(valid_y, valid_y_pred, sample_weight=valid_w)

print("Valid Weighted Classification Accuracy: %f" % valid_weighted_score)

现在我们训练模型 (黙认 10)并测量准确性:

Train Weighted Classification Accuracy: 0.742045

Valid Weighted Classification Accuracy: 0.648828

使用TensorBoard跟踪模型的收敛

我们用TensorBoard来观察模型。首先检图结构 (Figure 4-35).

然后扩展隐藏层(Figure 4-36).

图 4-35. 可视化全连接网络的计算图.

图 4-36. 可视化全连接网络的扩展计算图.

你可以看到可训练参数和dropout操作在这里是如何呈现的。下面是损失曲线 (Figure 4-37).

图4-37. 可视化全连接网络的损失曲线.

我们放大看仔细点 (Figure 4-38).

图 4-38. 局部放大损失曲线

看起来并不平! 这就是使用 minibatch训练的代价。我们不再有漂亮平滑的损失曲线。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90106.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90106.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/90106.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ReasonFlux:基于思维模板与分层强化学习的高效推理新范式

“以结构化知识压缩搜索空间&#xff0c;让轻量模型实现超越尺度的推理性能” ReasonFlux 是由普林斯顿大学与北京大学联合研发的创新框架&#xff08;2025年2月发布&#xff09;&#xff0c;通过 结构化思维模板 与 分层强化学习&#xff0c;显著提升大语言模型在复杂推理任务…

PHP与Web页面交互:从基础表单到AJAX实战

文章目录 PHP与Web页面交互:从基础到高级实践 1. 引言 2. 基础表单处理 2.1 HTML表单与PHP交互基础 2.2 GET与POST方法比较 3. 高级交互技术 3.1 AJAX与PHP交互 3.2 使用Fetch API进行现代AJAX交互 4. 文件上传处理 5. 安全性考量 5.1 常见安全威胁与防护 5.2 数据验证与过滤 …

OpenCV基本的图像处理

参考资料&#xff1a; 参考视频 视频参考资料:链接: https://pan.baidu.com/s/1_DJTOerxpu5_dSfd4ZNlAA 提取码: 8v2n 相关代码 概述&#xff1a; 因为本人是用于机器视觉的图像处理&#xff0c;所以只记录了OpenCV的形态学操作和图像平滑处理两部分 形态学操作&#xff1a;…

Git 与 GitHub 学习笔记

本文是一份全面的 Git 入门指南,涵盖了从环境配置、创建仓库到日常分支管理和与 GitHub 同步的全部核心操作。 Part 1: 初始配置 (一次性搞定) 在开始使用 Git 之前,需要先配置好你的电脑环境。(由于网络的原因,直接使用https的方式拉取仓库大概率是失败的,故使用ssh的方…

文件系统-文件存储空间管理

文件存储空间管理的核心是空闲块的组织、分配与回收&#xff0c;确保高效利用磁盘空间并快速响应文件操作&#xff08;创建、删除、扩展&#xff09;。以下是三种主流方法&#xff1a;1. 空闲表法&#xff08;连续分配&#xff09;原理&#xff1a;类似内存动态分区&#xff0c…

python爬虫实战-小案例:爬取苏宁易购的好评

一、项目背景与价值1 为什么爬取商品好评&#xff1f; 消费者洞察&#xff1a;分析用户真实反馈&#xff0c;了解产品优缺点 市场研究&#xff1a;监测竞品评价趋势&#xff0c;优化产品策略二.实现代码from selenium import webdriver from selenium.webdriver.edge.options i…

Spring Boot环境搭建与核心原理深度解析

一、开发环境准备 1.1 工具链选择 JDK版本&#xff1a;推荐使用JDK 17&#xff08;LTS版本&#xff09;&#xff0c;与Spring Boot 3.2.5完全兼容&#xff0c;支持虚拟线程等JDK 21特性可通过配置启用构建工具&#xff1a;Maven 3.8.6&#xff08;配置阿里云镜像加速依赖下载…

Java自动拆箱机制

在黑马点评项目中&#xff0c;提到了一个细节&#xff0c;就是Java的自动拆箱机制&#xff0c;本文来简单了解一下。Java 的​​自动拆箱机制&#xff08;Unboxing&#xff09;​​是一种编译器层面的语法糖&#xff0c;用于简化​​包装类对象​​&#xff08;如 Integer、Boo…

哈希算法(Hash Algorithm)

哈希算法&#xff08;Hash Algorithm&#xff09;是一种将任意长度的数据映射为固定长度的哈希值&#xff08;Hash Value&#xff09;的算法&#xff0c;广泛应用于密码学、数据完整性验证、数据结构&#xff08;如哈希表&#xff09;和数字签名等领域。&#x1f9e0; 一、哈希…

黑马点评使用Apifox进行接口测试(以导入更新店铺为例、详细图解)

目录 一、前言 二、手动完成接口测试所需配置 三、进行接口测试 一、前言 在学习黑马点评P39实现商铺缓存与数据库的双写一致课程中&#xff0c;老师使用postman进行了更新店铺的接口测试。由于课程是22年的&#xff0c;按照我从24年JavaWebAI课程所学习使用的Apifox内部其实…

Ubuntu 虚拟机配置 与Windows互传文件

在VMware中为Ubuntu虚拟机设置共享文件夹 设置共享文件夹可以传递大量文件 在VMware的设置中打开共享文件夹功能&#xff0c;并设置共享文件夹的目录。 点击添加后&#xff0c;选择一个电脑上的文件夹&#xff0c;这个文件夹最好是新建的空的。 完成后在“文件夹”列表中就…

机器学习对词法分析、句法分析、浅层语义分析的积极影响

机器学习在自然语言处理的词法、句法及浅层语义分析中产生了革命性影响&#xff0c;显著提升了各任务的精度和效率。以下是具体影响及实例说明&#xff1a;​​一、词法分析​​1. ​​中文分词​​​​提升歧义消解能力​​&#xff1a;传统方法依赖规则或统计&#xff0c;但深…

初学者STM32—USART

一、简介USART&#xff08;Universal Synchronous/Asynchronous Receiver/Transmitter&#xff0c;通用同步/异步收发器&#xff09;是一种常见的串行通信协议&#xff0c;广泛应用于微控制器、传感器、模块和其他电子设备之间的数据传输。本节课主要学习USART的基本结构以及其…

A316-V71-Game-V1:虚拟7.1游戏声卡评估板技术解析

引言 随着游戏产业的蓬勃发展&#xff0c;沉浸式音频体验成为提升游戏体验的关键因素。本文将介绍一款专为游戏音频设计的评估板——A316-V71-Game-V1&#xff0c;这是一款基于XMOS XU316技术的虚拟7.1游戏声卡评估平台。产品概述 A316-V71-Game-V1是一款专为虚拟7.1游戏声卡设…

小白成长之路-部署Zabbix7

文章目录一、概述二、案例三、第二台虚拟机监控总结一、概述 二、案例 实验开始前&#xff1a; systemctl disable --now firewalld setenforce 0 Rocky9.4部署Zabbix7 一、配置安装源 rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-7.0-5.el…

飞书非正常显示与权限问题解决方案

可能是本地缓存导致的&#xff0c;让员工参考以下方法操作下&#xff1a;看不懂下面的建议删除飞书再重新安装&#xff1b;博主就遇到过版本低的原因&#xff0c;试过下面方面都不行。结果就是删除重新安装&#xff0c;博主是mac电脑。Windows 系统关闭飞书。如果不能关闭&…

第十八节:第八部分:java高级:动态代理设计模式介绍、准备工作、代码实现

程序为什么需要代理以及代理长什么样如何为java对象创建一个代理对象代码&#xff1a; BigStar类 package com.itheima.day11_Proxy;public class BigStar implements Star {private String name;public BigStar(String name) {this.name name;}public String sing(String nam…

Grok网站的后端语言是php和Python2.7

老马的Grok模型 https://grok.com/#subscribephp语法这里还出现了两个bug后端语言能看到是php和python2.7要说卷还是得看中国的程序员啊&#xff0c;天天就是新技术&#xff0c;赶不上别人就35岁毕业退休

开发者的AI认知指南:用大模型重新理解人工智能(下)

第三篇 深度学习探索&#xff1a;神经网络的奥秘解析 从手工特征工程到自动特征学习&#xff0c;深度学习为什么能让AI"看懂"图片、"听懂"语音&#xff1f;让我们用开发者的视角揭开神经网络的神秘面纱。 深度学习的"代码革命" 还记得我们在第二…

基于单片机智能消毒柜设计

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目速选一览表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目功能速览 概述 本设计实现了一种基于单片机的高效智能消毒柜系统&#xff0c;集精准灭菌、安全防护与能耗管理于…