前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用ResNet101作为预训练模型训练Faster-RCNN-TensorFlow-Python3-master[通俗易懂]

使用ResNet101作为预训练模型训练Faster-RCNN-TensorFlow-Python3-master[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-11-08 07:04:28
发布于 2022-11-08 07:04:28
1K00
代码可运行
举报
运行总次数:0
代码可运行

  使用VGG16作为预训练模型训练Faster-RCNN-TensorFlow-Python3-master的详细步骤→Windows10+Faster-RCNN-TensorFlow-Python3-master+VOC2007数据集

  如果使用ResNet101作为预训练模型训练Faster-RCNN-TensorFlow-Python3-master,在之前使用VGG16作为预训练模型的训练步骤基础上需要修改几个地方。

  • 第一个,在之前的第6步时,改为下载预训练模型ResNet101,在./data文件夹下新建文件夹imagenet_weights,将下载好的resnet_v1_101_2016_08_28.tar.gz解压到./data/imagenet_weights路径下,并将resnet_v1_101.ckpt重命名为resnet101.ckpt
  • 第二个,在之前的第7步时,除了修改最大迭代次数max_iters参数和迭代多少次保存一次模型snap_iterations参数之外,还需要修改以下几个参数。 ① 将network参数由vgg16改为resnet101

② 将pretrained_model参数由./data/imagenet_weights/vgg16.ckpt改为./data/imagenet_weights/resnet101.ckpt

③ 增加pooling_modeFIXED_BLOCKSPOOLING_SIZEMAX_POOL四个参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tf.app.flags.DEFINE_string('network', "resnet101", "The network to be used as backbone")
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tf.app.flags.DEFINE_string('pretrained_model', "./data/imagenet_weights/resnet101.ckpt", "Pretrained network weights")
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ResNet options
tf.app.flags.DEFINE_string('pooling_mode', "crop", "Default pooling mode")
tf.app.flags.DEFINE_integer('FIXED_BLOCKS', 1, "Number of fixed blocks during training")
tf.app.flags.DEFINE_integer('POOLING_SIZE', 7, "Size of the pooled region after RoI pooling")
tf.app.flags.DEFINE_boolean('MAX_POOL', False, "Whether to append max-pooling after crop_and_resize")
  • 第三个,对resnet_v1.py文件进行修改,用下面的代码替换原文件中的代码。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# --------------------------------------------------------
# Tensorflow Faster R-CNN
# Licensed under The MIT License [see LICENSE for details]
# Written by Zheqi He and Xinlei Chen
# --------------------------------------------------------
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import tensorflow as tf
import tensorflow.contrib.slim as slim
from tensorflow.contrib.slim import losses
from tensorflow.contrib.slim import arg_scope
from tensorflow.contrib.slim.python.slim.nets import resnet_utils
from tensorflow.contrib.slim.python.slim.nets import resnet_v1
import numpy as np
from lib.nets.network import Network
from tensorflow.python.framework import ops
from tensorflow.contrib.layers.python.layers import regularizers
from tensorflow.python.ops import nn_ops
from tensorflow.contrib.layers.python.layers import initializers
from tensorflow.contrib.layers.python.layers import layers
from lib.config import config as cfg
def resnet_arg_scope(is_training=True,
weight_decay=cfg.FLAGS.weight_decay,
# weight_decay=cfg.TRAIN.WEIGHT_DECAY,
batch_norm_decay=0.997,
batch_norm_epsilon=1e-5,
batch_norm_scale=True):
batch_norm_params = { 

# NOTE 'is_training' here does not work because inside resnet it gets reset:
# https://github.com/tensorflow/models/blob/master/slim/nets/resnet_v1.py#L187
'is_training': False,
'decay': batch_norm_decay,
'epsilon': batch_norm_epsilon,
'scale': batch_norm_scale,
'trainable': False,
'updates_collections': ops.GraphKeys.UPDATE_OPS
}
with arg_scope(
[slim.conv2d],
weights_regularizer=regularizers.l2_regularizer(weight_decay),
weights_initializer=initializers.variance_scaling_initializer(),
trainable=is_training,
activation_fn=nn_ops.relu,
normalizer_fn=layers.batch_norm,
normalizer_params=batch_norm_params):
with arg_scope([layers.batch_norm], **batch_norm_params) as arg_sc:
return arg_sc
class resnetv1(Network):
def __init__(self, batch_size=1, num_layers=101):
Network.__init__(self, batch_size=batch_size)
self._num_layers = num_layers
self._resnet_scope = 'resnet_v1_%d' % num_layers
def _crop_pool_layer(self, bottom, rois, name):
with tf.variable_scope(name) as scope:
batch_ids = tf.squeeze(tf.slice(rois, [0, 0], [-1, 1], name="batch_id"), [1])
# Get the normalized coordinates of bboxes
bottom_shape = tf.shape(bottom)
height = (tf.to_float(bottom_shape[1]) - 1.) * np.float32(self._feat_stride[0])
width = (tf.to_float(bottom_shape[2]) - 1.) * np.float32(self._feat_stride[0])
x1 = tf.slice(rois, [0, 1], [-1, 1], name="x1") / width
y1 = tf.slice(rois, [0, 2], [-1, 1], name="y1") / height
x2 = tf.slice(rois, [0, 3], [-1, 1], name="x2") / width
y2 = tf.slice(rois, [0, 4], [-1, 1], name="y2") / height
# Won't be backpropagated to rois anyway, but to save time
bboxes = tf.stop_gradient(tf.concat([y1, x1, y2, x2], 1))
if cfg.FLAGS.MAX_POOL:
pre_pool_size = cfg.FLAGS.POOLING_SIZE * 2
crops = tf.image.crop_and_resize(bottom, bboxes, tf.to_int32(batch_ids), [pre_pool_size, pre_pool_size],
name="crops")
crops = slim.max_pool2d(crops, [2, 2], padding='SAME')
else:
crops = tf.image.crop_and_resize(bottom, bboxes, tf.to_int32(batch_ids),
[cfg.FLAGS.POOLING_SIZE, cfg.FLAGS.POOLING_SIZE],
name="crops")
return crops
# Do the first few layers manually, because 'SAME' padding can behave inconsistently
# for images of different sizes: sometimes 0, sometimes 1
def build_base(self):
with tf.variable_scope(self._resnet_scope, self._resnet_scope):
net = resnet_utils.conv2d_same(self._image, 64, 7, stride=2, scope='conv1')
net = tf.pad(net, [[0, 0], [1, 1], [1, 1], [0, 0]])
net = slim.max_pool2d(net, [3, 3], stride=2, padding='VALID', scope='pool1')
return net
def build_network(self, sess, is_training=True):
# select initializers
# if cfg.TRAIN.TRUNCATED:
if cfg.FLAGS.initializer == "truncated":
initializer = tf.truncated_normal_initializer(mean=0.0, stddev=0.01)
initializer_bbox = tf.truncated_normal_initializer(mean=0.0, stddev=0.001)
else:
initializer = tf.random_normal_initializer(mean=0.0, stddev=0.01)
initializer_bbox = tf.random_normal_initializer(mean=0.0, stddev=0.001)
bottleneck = resnet_v1.bottleneck
# choose different blocks for different number of layers
if self._num_layers == 50:
blocks = [
resnet_utils.Block('block1', bottleneck,
[(256, 64, 1)] * 2 + [(256, 64, 2)]),
resnet_utils.Block('block2', bottleneck,
[(512, 128, 1)] * 3 + [(512, 128, 2)]),
# Use stride-1 for the last conv4 layer
resnet_utils.Block('block3', bottleneck,
[(1024, 256, 1)] * 5 + [(1024, 256, 1)]),
resnet_utils.Block('block4', bottleneck, [(2048, 512, 1)] * 3)
]
elif self._num_layers == 101:
# blocks = [
# resnet_utils.Block('block1', bottleneck,
# [(256, 64, 1)] * 2 + [(256, 64, 2)]),
# resnet_utils.Block('block2', bottleneck,
# [(512, 128, 1)] * 3 + [(512, 128, 2)]),
# # Use stride-1 for the last conv4 layer
# resnet_utils.Block('block3', bottleneck,
# [(1024, 256, 1)] * 22 + [(1024, 256, 1)]),
# resnet_utils.Block('block4', bottleneck, [(2048, 512, 1)] * 3)
# ]
blocks = [
resnet_v1.resnet_v1_block('block1', base_depth=64, num_units=3, stride=2),
resnet_v1.resnet_v1_block('block2', base_depth=128, num_units=4, stride=2),
resnet_v1.resnet_v1_block('block3', base_depth=256, num_units=23, stride=1),
resnet_v1.resnet_v1_block('block4', base_depth=512, num_units=3, stride=1),
]
elif self._num_layers == 152:
blocks = [
resnet_utils.Block('block1', bottleneck,
[(256, 64, 1)] * 2 + [(256, 64, 2)]),
resnet_utils.Block('block2', bottleneck,
[(512, 128, 1)] * 7 + [(512, 128, 2)]),
# Use stride-1 for the last conv4 layer
resnet_utils.Block('block3', bottleneck,
[(1024, 256, 1)] * 35 + [(1024, 256, 1)]),
resnet_utils.Block('block4', bottleneck, [(2048, 512, 1)] * 3)
]
else:
# other numbers are not supported
raise NotImplementedError
# assert (0 <= cfg.RESNET.FIXED_BLOCKS < 4)
assert (0 <= cfg.FLAGS.FIXED_BLOCKS < 4)
if cfg.FLAGS.FIXED_BLOCKS == 3:
with slim.arg_scope(resnet_arg_scope(is_training=False)):
net = self.build_base()
net_conv4, _ = resnet_v1.resnet_v1(net,
blocks[0:cfg.FLAGS.FIXED_BLOCKS],
global_pool=False,
include_root_block=False,
scope=self._resnet_scope)
elif cfg.FLAGS.FIXED_BLOCKS > 0:
with slim.arg_scope(resnet_arg_scope(is_training=False)):
net = self.build_base()
net, _ = resnet_v1.resnet_v1(net,
blocks[0:cfg.FLAGS.FIXED_BLOCKS],
global_pool=False,
include_root_block=False,
scope=self._resnet_scope)
with slim.arg_scope(resnet_arg_scope(is_training=is_training)):
net_conv4, _ = resnet_v1.resnet_v1(net,
blocks[cfg.FLAGS.FIXED_BLOCKS:-1],
global_pool=False,
include_root_block=False,
scope=self._resnet_scope)
else:  # cfg.RESNET.FIXED_BLOCKS == 0
with slim.arg_scope(resnet_arg_scope(is_training=is_training)):
net = self.build_base()
net_conv4, _ = resnet_v1.resnet_v1(net,
blocks[0:-1],
global_pool=False,
include_root_block=False,
scope=self._resnet_scope)
self._act_summaries.append(net_conv4)
self._layers['head'] = net_conv4
with tf.variable_scope(self._resnet_scope, self._resnet_scope):
# build the anchors for the image
self._anchor_component()
# rpn
rpn = slim.conv2d(net_conv4, 512, [3, 3], trainable=is_training, weights_initializer=initializer,
scope="rpn_conv/3x3")
self._act_summaries.append(rpn)
rpn_cls_score = slim.conv2d(rpn, self._num_anchors * 2, [1, 1], trainable=is_training,
weights_initializer=initializer,
padding='VALID', activation_fn=None, scope='rpn_cls_score')
# change it so that the score has 2 as its channel size
rpn_cls_score_reshape = self._reshape_layer(rpn_cls_score, 2, 'rpn_cls_score_reshape')
rpn_cls_prob_reshape = self._softmax_layer(rpn_cls_score_reshape, "rpn_cls_prob_reshape")
rpn_cls_prob = self._reshape_layer(rpn_cls_prob_reshape, self._num_anchors * 2, "rpn_cls_prob")
rpn_bbox_pred = slim.conv2d(rpn, self._num_anchors * 4, [1, 1], trainable=is_training,
weights_initializer=initializer,
padding='VALID', activation_fn=None, scope='rpn_bbox_pred')
if is_training:
rois, roi_scores = self._proposal_layer(rpn_cls_prob, rpn_bbox_pred, "rois")
rpn_labels = self._anchor_target_layer(rpn_cls_score, "anchor")
# Try to have a determinestic order for the computing graph, for reproducibility
with tf.control_dependencies([rpn_labels]):
rois, _ = self._proposal_target_layer(rois, roi_scores, "rpn_rois")
else:
# if cfg.TEST.MODE == 'nms':
if cfg.FLAGS.test_mode == "nms":
rois, _ = self._proposal_layer(rpn_cls_prob, rpn_bbox_pred, "rois")
# elif cfg.TEST.MODE == 'top':
elif cfg.FLAGS.test_mode == "top":
rois, _ = self._proposal_top_layer(rpn_cls_prob, rpn_bbox_pred, "rois")
else:
raise NotImplementedError
# rcnn
if cfg.FLAGS.pooling_mode == 'crop':
pool5 = self._crop_pool_layer(net_conv4, rois, "pool5")
else:
raise NotImplementedError
with slim.arg_scope(resnet_arg_scope(is_training=is_training)):
fc7, _ = resnet_v1.resnet_v1(pool5,
blocks[-1:],
global_pool=False,
include_root_block=False,
scope=self._resnet_scope)
with tf.variable_scope(self._resnet_scope, self._resnet_scope):
# Average pooling done by reduce_mean
fc7 = tf.reduce_mean(fc7, axis=[1, 2])
cls_score = slim.fully_connected(fc7, self._num_classes, weights_initializer=initializer,
trainable=is_training, activation_fn=None, scope='cls_score')
cls_prob = self._softmax_layer(cls_score, "cls_prob")
bbox_pred = slim.fully_connected(fc7, self._num_classes * 4, weights_initializer=initializer_bbox,
trainable=is_training,
activation_fn=None, scope='bbox_pred')
self._predictions["rpn_cls_score"] = rpn_cls_score
self._predictions["rpn_cls_score_reshape"] = rpn_cls_score_reshape
self._predictions["rpn_cls_prob"] = rpn_cls_prob
self._predictions["rpn_bbox_pred"] = rpn_bbox_pred
self._predictions["cls_score"] = cls_score
self._predictions["cls_prob"] = cls_prob
self._predictions["bbox_pred"] = bbox_pred
self._predictions["rois"] = rois
self._score_summaries.update(self._predictions)
return rois, cls_prob, bbox_pred
def get_variables_to_restore(self, variables, var_keep_dic):
variables_to_restore = []
for v in variables:
# exclude the first conv layer to swap RGB to BGR
if v.name == (self._resnet_scope + '/conv1/weights:0'):
self._variables_to_fix[v.name] = v
continue
if v.name.split(':')[0] in var_keep_dic:
print('Varibles restored: %s' % v.name)
variables_to_restore.append(v)
return variables_to_restore
def fix_variables(self, sess, pretrained_model):
print('Fix Resnet V1 layers..')
with tf.variable_scope('Fix_Resnet_V1') as scope:
with tf.device("/cpu:0"):
# fix RGB to BGR
conv1_rgb = tf.get_variable("conv1_rgb", [7, 7, 3, 64], trainable=False)
restorer_fc = tf.train.Saver({ 
self._resnet_scope + "/conv1/weights": conv1_rgb})
restorer_fc.restore(sess, pretrained_model)
sess.run(tf.assign(self._variables_to_fix[self._resnet_scope + '/conv1/weights:0'],
tf.reverse(conv1_rgb, [2])))
  • 第四个,在之前的第9步时,点击Run 'train'开始训练之前先修改train.py代码的如下几个地方。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 添加的代码(使用resnet101作为预训练模型)
from lib.nets.resnet_v1 import resnetv1
# 添加结束
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        # 添加的代码(使用resnet101)
if cfg.FLAGS.network == 'resnet101':
self.net = resnetv1(batch_size=cfg.FLAGS.ims_per_batch)
# 添加结束
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        # Store the model snapshot
filename = 'resnet101_faster_rcnn_iter_{:d}'.format(iter) + '.ckpt'
filename = os.path.join(self.output_dir, filename)
self.saver.save(sess, filename)
print('Wrote snapshot to: {:s}'.format(filename))
# Also store some meta information, random state, etc.
nfilename = 'resnet101_faster_rcnn_iter_{:d}'.format(iter) + '.pkl'
nfilename = os.path.join(self.output_dir, nfilename)

  经过上面的几步修改后,就可以运行train.py开始训练模型了。   训练时,模型保存的路径是./default/voc_2007_trainval/default,每次保存模型都是保存4个文件,如下图所示。

  相应地,测试时也需要修改几个地方。

  • 第一个,在之前的第12步时,改为新建./output/resnet101/voc_2007_trainval/default文件夹,从./default/voc_2007_trainval/default路径下复制一组模型数据到新建的文件夹下,并将所有文件名改为resnet101.后缀
  • 第二个,在之前的第13步时,对demo.py再进行如下的修改。

  经过上面的几步修改后,就可以运行demo.py开始测试模型了。   在输出PR曲线并计算AP值时,同样也需要修改test_net.py文件中的几个地方,如下图所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 添加的代码(使用resnet101)
from lib.nets.resnet_v1 import resnetv1
# 添加结束
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# NETS = {'vgg16': ('vgg16.ckpt',)} # 自己需要修改:训练输出模型
NETS = { 
'resnet101': ('resnet101.ckpt',)}  # 自己需要修改:训练输出模型

  经过上面的几步修改后,就可以运行test_net.py来输出PR曲线并计算AP值了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/185293.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月6日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
NLPIR中文数据挖掘帮助企业执行最佳商业决策
随着计算机在生活中的应用逐渐增加,网络技术和通信技术在企业运营所占比重也在增加。这些都使得企业在运营过程中会产生大量的数据,而如何规划和分析这些数据,对于企业的长期发展也十分重要。
用户6287968
2019/09/24
8230
NLPIR中文数据挖掘帮助企业执行最佳商业决策
智能决策:人工智能+大数据
本文介绍了人工智能决策系统的发展背景,分析了传统决策系统的痛点,并重点介绍了基于人工智能和大数据技术的智能决策系统的架构设计和实现。该系统可以为各行业提供智能化、精准化、个性化的决策支持,具有广泛的应用前景。
人工智能的秘密
2017/12/21
5.6K0
智能决策:人工智能+大数据
数据驱动智能,智能优化数据——大数据与人工智能的双向赋能
在数字化浪潮席卷全球的今天,大数据和人工智能(AI)已成为推动技术创新和产业升级的核心动力。这两者之间的关系并非简单的单向依赖,而是一种深度协同、相互赋能的关系。大数据为人工智能提供了养料,而人工智能则为大数据的处理与应用带来了革新。
Echo_Wish
2025/04/21
1360
数据驱动智能,智能优化数据——大数据与人工智能的双向赋能
AI 插手!用文本分析鉴定《红楼梦》《亨利八世》实际作者
导读:《红楼梦》、《亨利八世》都是经典的文学名著,许多历史和研究都暗示这些名著有不止一位作者,但文学界对此众说纷纭无法给出定论。而最近,基于人工智能和数据科学的研究发现,则是从数据分析的维度上,去区分一部作品的具体作者。
IT阅读排行榜
2019/12/10
1.5K0
AI 插手!用文本分析鉴定《红楼梦》《亨利八世》实际作者
客户画像中的聚类分析
实际工作中,最常使用的当属回归类模型,其次便是客户画像。即便是评分模型也会涉及到客户画像,由于首富客户的违约特征与普通百姓不同,故需进行区分,信用分池即为客户画像。
许卉
2019/07/15
1.7K0
客户画像中的聚类分析
R语言《红楼梦》文本挖掘:词频统计、词云可视化及前后对比分析
作为中国古典文学的瑰宝,《红楼梦》具有极高的文学价值和丰富的主题内涵(点击文末“阅读原文”获取完整代码数据)。
拓端
2023/11/22
7640
R语言《红楼梦》文本挖掘:词频统计、词云可视化及前后对比分析
我们精选出十篇数据干货,助你圆满收官2017!
回顾2017,始终紧跟历史进程的DT君,带大家用数据视角探索世界:从人工智能到共享经济,从影视热点到古典文学,我们探索过新零售的“门店秘密”,也挖掘过城市空间的“可视化创新”;我们讨论过科技圈最前沿的算法,也揭示过潜藏在人际关系数据中的社会价值……今天DT君精选出年度十篇数据侠好文回馈各位新老粉丝,祝你们携满干货跨入2018年。
DT数据侠
2018/08/08
3530
我们精选出十篇数据干货,助你圆满收官2017!
干货 ▏用机器学习的方法鉴别红楼梦作者
在学界一般认为,《红楼梦》后 40 回并非曹雪芹所著。本文尝试应用机器学习的方法来分析原著文本中作者的用词习惯,从技术角度去说明《红楼梦》前 80 回和后 40 回的写作风格差别,继而可以确认后 40 回非原作者所写。
IT阅读排行榜
2018/08/14
5210
干货  ▏用机器学习的方法鉴别红楼梦作者
红楼梦、法律,BERT 已有如此多的神奇应用
2019 年 5 月 ACM 图灵大会上,朱松纯教授(加州大学洛杉矶分校)与沈向洋博士(微软全球执行副总裁)在谈到「人工智能时代的道路选择」这个话题时,沈向洋博士认为人工智能发展在工业界将会迎来黄金十年,而朱松纯教授也表示人工智能的发展趋势将会走向大一统,从小任务走向大任务,从 AI 六大学科走向统一。
机器之心
2019/07/19
1K0
红楼梦、法律,BERT 已有如此多的神奇应用
用Python分析《红楼梦》:见证了贾府的兴衰,你是否还能“笑道”世事无常
本文通过分析《红楼梦》的章回和词汇,使用聚类算法来发现贾府的兴衰变化。通过对比前后文,发现“笑道”这个词在全文中的权重变化,从贾府的鼎盛时期到衰败时期,体现出人物和贾府的命运变化。同时,通过分析“笑道”这个词在全文中的出现频率,可以发现贾府的兴衰与人物命运的变化具有密切的联系。
企鹅号小编
2018/01/04
1.1K0
用Python分析《红楼梦》:见证了贾府的兴衰,你是否还能“笑道”世事无常
NLP小白入门篇:莫愁前路,一文读懂语料预处理
机器能跟人类交流吗?能像人类一样理解文本吗?这是大家对人工智能最初的想象。如今,NLP 技术可以充当人类和机器之间沟通的桥梁。环顾周围的生活,我们随时可以享受到 NLP 技术带来的便利,语音识别、机器翻译、问答系统等等。
机器之心
2020/08/04
5920
职场人涨薪30%的秘诀,看完这篇你就明白了
如果有人问:未来十年最值钱的技能是什么?数据思维能力一定名列前茅! 不知道大家有没有发现,在近几年的招聘中,不少岗位都要求具备数据思维处理问题的能力。拥有此能力的职场人薪资往往比同岗位高出30%,而且在面试过程中更容易受到面试官的欣赏。 在各大招聘网站中,我们很容易就可以看到与数据思维处理问题能力相关的岗位,薪资极具竞争力。可以这么说,如果你具备数据思维处理问题的能力,加上一些过往的工作经验,你将获得相当丰厚的待遇。 向左滑动查看更多 现在扫码进群或点击文末阅读原文,即可获得
博文视点Broadview
2023/05/06
1570
职场人涨薪30%的秘诀,看完这篇你就明白了
【CDAS 2017】大数据与人工智能分论坛:大数据驱动人工智能
作者 CDA 数据分析师 前言 2017年7月29日,由CDA数据分析师主办,以“跨界互联 数据未来”为主题的CDAS 2017第四届中国数据分析师行业峰会在北京中国大饭店隆重举行。 7月29日当天,除了引人眼球的主会场以外,当天同步开放11个分论坛,我们将逐一推送每个分论坛的盛况,以及演讲嘉宾速记稿整理,给每一个CDA成员奉上干货。 2017年CDAS第4届中国数据分析师行业峰会大数据与人工智能分论坛中,来自IBM、猎聘网、智众互动、智库等6位专家与资深行业领军人物分享了大数据时代,大数据如和驱动
CDA数据分析师
2018/02/26
8380
【CDAS 2017】大数据与人工智能分论坛:大数据驱动人工智能
数据大帝国:大数据与人工智能的巅峰融合
随着科技的迅猛发展,大数据和人工智能(AI)已经成为当今科技领域的两大热门话题。它们不仅在各自领域内取得了重大突破,还在不断地交汇和融合,开创了数据大帝国的时代。本文将深入探讨大数据和人工智能的融合,分析其在不同领域中的应用,以及这一趋势对未来的影响。
IT_陈寒
2023/12/13
1.2K0
数据大帝国:大数据与人工智能的巅峰融合
自然语言处理概述
自然语言处理(Natural Language Processing,NLP)是计算机科学、人工智能和语言学的交叉学科,其范畴广泛,比如:语音合成、分词、词法分析、问答系统、机器翻译、情感分析等等。
老齐
2022/12/09
3.4K0
大数据搜索与挖掘:知著-见微-晓意【大数据100分】
主讲嘉宾:张华平 主持人:中关村大数据产业联盟 副秘书长 林春雨 承办:中关村大数据产业联盟 嘉宾简介:张华平博士,副教授,北京理工大学大数据搜索与挖掘实验室主任,研究生导师,知名汉语分词系统ICTCLAS的创始人,中国计算机学会YOCSEF委员及普及工委委员,中国中文信息学会社会媒体处理专业委员会常务委员,首都师范大学,辽宁师范大学客座教授,北京市重点产业知识产权联盟专家、同时担任《计算机学报》、《计算机研究与发展》、中国科技论文在线等杂志的特邀评审专家。研究方向为:大数据搜索与挖掘、自然语言处理、社交
大数据文摘
2018/05/21
7670
【数据挖掘】数据挖掘与生活:算法分类和应用
“如何分辨出垃圾邮件”、“如何判断一笔交易是否属于欺诈”、“如何判断红酒的品质和档次”、“扫描王是如何做到文字识别的”、“如何判断佚名的著作是否出自某位名家之手”、“如何判断一个细胞是否属于肿瘤细胞”等等,这些问题似乎都很专业,都不太好回答。但是,如果了解一点点数据挖掘(Data Mining)的知识,你,或许会有柳暗花明的感觉。 的确,数据挖掘无处不在。它和生活密不可分,就像空气一样,弥漫在你的周围。但是,很多时候,你并不能意识到它。因此,它是陌生的,也是熟悉的。 本文,主要想简单介绍下数据挖掘中的算法,
陆勤_数据人网
2018/02/26
1.7K0
【数据挖掘】数据挖掘与生活:算法分类和应用
用 Python 分析《红楼梦》(1)
專 欄 ❈楼宇,Python中文社区专栏作者。一位正在海外苦苦求学的本科生。初中时自学编程,后来又在几位良师的帮助下走上了计算机科学的道路。曾经的 OIer,现暂时弃坑。兴趣不定,从机器学习、文本挖掘到文字识别以及各种杂七杂八的知识都有一点点涉猎。同时也对物理学有相当大的兴趣。 知乎:https://www.zhihu.com/people/lou-yu-54-62/posts GitHub:https://github.com/LouYu2015❈ 1 前言 两个月以来,我通过互联网自学了一些文本处理的
Python中文社区
2018/02/01
2.1K0
用 Python 分析《红楼梦》(1)
用Python分析红楼梦,见证贾府的兴衰
在上一篇文章,我们借用jieba分词工具,提取了《红楼梦》120回中的出现次数较高的词,然后用词云工具将结果画了出来。
HuangWeiAI
2019/08/15
1.6K0
数据挖掘与生活:算法分类和应用
“如何分辨出垃圾邮件”、“如何判断一笔交易是否属于欺诈”、“如何判断红酒的品质和档次”、“扫描王是如何做到文字识别的”、“如何判断佚名的著作是否出自某位名家之手”、“如何判断一个细胞是否属于肿瘤细胞”等等,这些问题似乎都很专业,都不太好回答。但是,如果了解一点点数据挖掘(Data Mining)的知识,你,或许会有柳暗花明的感觉。 的确,数据挖掘无处不在。它和生活密不可分,就像空气一样,弥漫在你的周围。但是,很多时候,你并不能意识到它。因此,它是陌生的,也是熟悉的。 本文,主要想简单介绍下数据挖掘中的算法,
小莹莹
2018/04/20
2.6K0
数据挖掘与生活:算法分类和应用
推荐阅读
相关推荐
NLPIR中文数据挖掘帮助企业执行最佳商业决策
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档