什么是迁移学习?什么时候使用迁移学习?

迁移学习是一种深度学习策略,它通过将解决一个问题所获得的知识应用于另一个不同但相关的问题来重用这些知识。例如,有3种类型的花:玫瑰、向日葵和郁金香。可以使用标准的预训练模型,如VGG16/19、ResNet50或Inception v3模型(在ImageNet上预训练了1000个输出类)对花卉图像进行分类,但是由于模型没有学习这些花卉类别,因此这样的模型无法正确识别它们。换句话说,它们是模型不知道的类。

图11-13所示的是预先训练的VGG16模型错误地对花卉图像进行了分类(代码留给读者作为练习)。其中flamingo(火鹤花)的可信度为0.83,daisy(雏菊)的可信度为0.43,artichoke(菊芋)的可信度为0.33。

图11-13 预先训练的VGG16模型对花卉图像的误分类

用Keras实现迁移学习

许多综合图像分类问题进行了预处理模型的训练。在使用卷积网络对猫与狗图像分类的语境中,以卷积层作为特征提取器,以全连接层作为分类器,如图11-14所示。

图11-14 卷积神经网络体系构架

由于标准模型(如VGG-16/19)相当庞大,并且针对许多图像进行了训练,因此它们能够为不同的类学习许多不同的特性。读者可以简单地重用卷积层作为特征提取器,学习低阶和高阶图像特征,并只训练全连接层权重(参数),这就是迁移学习。

当有一个简洁的训练集时,可以使用迁移学习,所处理的问题与之前训练的模型是一样的。如果有足够的数据,则可以调整卷积层,从头开始学习所有的模型参数,以便训练模型来学习与问题相关的更健壮的特性。

现在,用迁移学习对玫瑰、向日葵和郁金香花的图像。这些图像是从TensorFlow示例图像数据集中获得的3个类各用550张图片,总共1650张,这是小数量的图片,但也是使用迁移学习的好地方。使用每个类中的500个图像进行训练,保留每个类中的其余50个图像进行验证。另外,创建一个名为flower_photos的文件夹,其中包含两个子文件夹train和valid,并将训练图像和验证图像分别保存在这些文件夹中。文件夹结构应该如图11-15所示。

图11-15 文件夹结构图

加载卷积层的权重,只针对预先训练好的VGG16模型(设置include_top=False,不加载最后两个全连接层),将它当作分类器。注意,最后一层的形状尺寸为7×7×512。

使用ImageDataGenerator类来加载图像,并使用flow_from_directory()函数来生成成批的图像和标签。还将使用model.predict()函数来通过网络传递图像,得到一个7×7×512维的张量,然后将张量重新塑造成一个向量,并以同样的方式找到validation_features。

也就是说,用Keras实现迁移学习对VGG16模型进行部分训练,即它只会根据所拥有的训练图像来学习全连接层的权重,然后用它来预测类,如下面的代码所示。

from keras.applications import VGG16
from keras.preprocessing.image import ImageDataGenerator
from keras import models, layers, optimizers
from keras.layers.normalization import BatchNormalization
from keras.preprocessing.image import load_img
# train only the top FC layers of VGG16, use weights learnt with ImageNet for the   
convolution layers
vgg_model = VGG16(weights='imagenet', include_top=False, input_shape=(224,224, 3))
# the directory flower_photos is assumed to be on the current path
train_dir = './flower_photos/train'
validation_dir = './flower_photos/valid'
n_train = 500*3
n_val = 50*3
datagen = ImageDataGenerator(rescale=1./255)
batch_size = 25
train_features = np.zeros(shape=(n_train, 7, 7, 512))
train_labels = np.zeros(shape=(n_train,3))
train_generator = datagen.flow_from_directory(train_dir, target_size=(224,224),
batch_size=batch_size, class_mode='categorical', shuffle=True)
i = 0
for inputs_batch, labels_batch in train_generator:
features_batch = vgg_model.predict(inputs_batch)
train_features[i * batch_size : (i + 1) * batch_size] = features_batch
train_labels[i * batch_size : (i + 1) * batch_size] = labels_batch
i += 1
if i * batch_size >= n_train: break
train_features = np.reshape(train_features, (n_train, 7 * 7 * 512))
validation_features = np.zeros(shape=(n_val, 7, 7, 512))
validation_labels = np.zeros(shape=(n_val,3))
validation_generator = datagen.flow_from_directory(validation_dir,
target_size=(224, 224),
batch_size=batch_size, class_mode='categorical', shuffle=False)
i = 0
for inputs_batch, labels_batch in validation_generator:
features_batch = vgg_model.predict(inputs_batch)
validation_features[i * batch_size : (i + 1) * batch_size] =features_batch
validation_labels[i * batch_size : (i + 1) * batch_size] = labels_batch
i += 1
if i * batch_size >= n_val: break
validation_features = np.reshape(validation_features, (n_val, 7 * 7 * 512))

接下来,使用带有3个类的softmax输出层的简单前馈网络创建模型。然后必须对模型进行训练,如下面的代码所示。可以看到,在Keras中训练一个网络就像调用model.fit()函数一样简单。为了检验模型的性能,先看看哪些图片被错误分类。

# now learn the FC layer parameters by training with the images we have
model = models.Sequential()
model.add(layers.Dense(512, activation='relu', input_dim=7 * 7 * 512))
model.add(BatchNormalization())
model.add(layers.Dropout(0.5))
model.add(layers.Dense(3, activation='softmax'))
model.compile(optimizer=optimizers.Adam(lr=1e-5),
loss='categorical_crossentropy', metrics=['acc'])
history = model.fit(train_features, train_labels, epochs=20,batch_size=batch_size,
validation_data=(validation_features,validation_labels))
filenames = validation_generator.filenames
ground_truth = validation_generator.classes
label2index = validation_generator.class_indices
# Getting the mapping from class index to class label
idx2label = dict((v,k) for k,v in label2index.items())
predictions = model.predict_classes(validation_features)
prob = model.predict(validation_features)
errors = np.where(predictions != ground_truth)[0]
print("No of errors = {}/{}".format(len(errors),n_val))
# No of errors = 13/150
pylab.figure(figsize=(20,12))
for i in range(len(errors)):
pred_class = np.argmax(prob[errors[i]])
pred_label = idx2label[pred_class]
original =load_img('{}/{}'.format(validation_dir,filenames[errors[i]]))
pylab.subplot(3,5,i+1), pylab.imshow(original), pylab.axis('off')
pylab.title('Original
label:{}\nPrediction:{}\nconfidence:{:.3f}'.format(
filenames[errors[i]].split('\\')[0], pred_label,
prob[errors[i]][pred_class]), size=15)
pylab.show()

运行上述代码,输出结果如图11-16所示。可以看到,在迁移学习模型的150幅图像中,验证数据集中有13幅图像被错误分类。

图11-16 迁移学习模型对验证数据集部分图像分类出错

最初使用的花卉图像(它们是验证数据集的一部分,没有用于训练迁移学习模型)现在被正确分类,如图11-17所示(代码实现作为练习留给读者)。

图11-17 利用迁移学习模型对之前错误分类图像的正确分类

本文摘自《Python图像处理实战》

[印度] 桑迪潘·戴伊(Sandipan Dey) 著,陈盈,邓军 译

  • 图像处理,计算机视觉人脸识别图像修复
  • 编程入门教程书籍零基础,深度学习爬虫
  • 用流行的Python图像处理库、机器学习库和深度学习库解决图像处理问题。


本书介绍如何用流行的Python 图像处理库、机器学习库和深度学习库解决图像处理问题。先介绍经典的图像处理技术,然后探索图像处理算法的演变历程,始终紧扣图像处理以及计算机视觉与深度学习方面的最新进展。全书共12 章,涵盖图像处理入门基础知识、应用导数方法实现图像增强、形态学图像处理、图像特征提取与描述符、图像分割,以及图像处理中的经典机器学习方法等内容。

本书适合Python 工程师和相关研究人员阅读,也适合对计算机视觉、图像处理、机器学习和深度学习感兴趣的软件工程师参考。

如果想进一步学习迁移学习,推荐《Python迁移学习》迪潘简·撒卡尔(Dipanjan Sarkar) 著,张浩然 译

  • 使用TensorFlow和Keras实现高级深度学习和神经网络模型

迁移学习是机器学习技术的一种,它可以从一系列机器学习问题的训练中获得知识,并将这些知识用于训练其他相似类型的问题。

本书分为3个部分:第1部分是深度学习基础,介绍了机器学习的基础知识、深度学习的基础知识和深度学习的架构;第2部分是迁移学习精要,介绍了迁移学习的基础知识和迁移学习的威力;第3部分是迁移学习案例研究,介绍了图像识别和分类、文本文档分类、音频事件识别和分类、DeepDream算法、风格迁移、自动图像扫描生成器、图像着色等内容。

本书适合数据科学家、机器学习工程师和数据分析师阅读,也适合对机器学习和迁移学习感兴趣的读者阅读。在阅读本书之前,希望读者对机器学习和Python编程有基本的掌握。

 

人邮异步社区
关注 关注
  • 9
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
博客
如何学习ai agent?
05-31 681
开 发者需要进行深入思考并动手实践,以确立 Agent 的开发框架、Agent 访问工具的方 式、与数据交互的方式,以及如何对话以完成具体任务。这些问题的答案将塑造未来 Agent 的形态和能力。■ Llama Index :开源框架,用于帮助管理和检索非结构化数据,利用大模型的 能力和 Agent 框架来提高文本检索的准确性、效率和智能程度。随着技术的进步,我们开始期待更多:我们所向往的是一个不仅把人工智能生成内 容视为工作的一部分,还将人工智能作为连接更加复杂任务的关键纽带的时代。
博客
如何成为一名合格的JAVA程序员?
05-29 724
每个条目中都讲述了对Java的独到见解,阐明了如何编写高效、优雅的程序,并且提供了清晰、易懂的示例代码。1.Java之父James Gosling鼎力推荐,Jolt获奖作品全新升级,与《Java编程思想》和《Java核心技术》(Core Java)齐名,针对Java 7、8、9全面更新,Java程序员必备参考书。本书是Jolt获奖作品Effective Java的第3版,对上一版进行了全面更新,涵盖了从Java 5到Java 9的种种特性,是Java开发人员不可缺少的一本参考书。你一定不能错过的两本书。
博客
AI Agent: Agent框架+7个实例
05-26 392
在这个定义中,“人工”指的是由人类创造或模拟,而“智能”指的是解决问 题、学习、适应新环境等的能力。人工智能领域的研究涵盖了从简单的自动化任务到复杂 的决策和问题解决过程,其根本追求是开发出能模仿、再现甚至超越人类智能水平的技术 和系统。开 发者需要进行深入思考并动手实践,以确立 Agent 的开发框架、Agent 访问工具的方 式、与数据交互的方式,以及如何对话以完成具体任务。当然,还有更为复杂的 Age nt。传统的人工智能技术通常局限于静态的功能,它们只能在特定且受限的环境中执行预先设定的任务。
博客
想自学编程,看编程书有些看不懂,下一步应该怎么办?
05-22 548
本书是一本Python入门书,适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用。这本书以习题的方式引导读者一步一步学习编程,从简单的打印一直讲到完整项目的实现,让初学者从基础的编程技术入手,最终体验到软件开发的基本过程。如果你想成为软件工程师,市场上对这类岗位的需求也日益增长,但是符合要求的候选者却总是供不应求。这是错误的印象,不过编程确实是一件困难的工作。手把手教你零基础学Python 3,本书不仅介绍了Python语言的基础知识,而且通过案例实践教读者如何使用这些知识和技能。
博客
没有数学基础可以学编程吗?
05-18 608
没有数学基础也可以学习编程。虽然数学在某些编程领域(如算法、数据分析、机器学习等)中扮演着重要角色,但编程本身并不完全依赖于。编程主要关注的是逻辑思维、问题分解和解决能力以及计算机语言的基本规则。初学者可以从一些基础的编程语言如Python、JavaScript或Java等开始学习,这些语言相对容易上手,且有很多适合初学者的教程和资源。当然,随着编程学习的深入,你可能会遇到一些需要数学背景知识的领域。但这并不意味着没有数学基础就不能继续学习编程。
博客
为什么自学编程那么难?
05-05 241
自学编程之所以难,主要有以下几个原因:针对以上问题,以下是一些入门编程书籍的推荐:
博客
程序员为什么不能一次性写好,需要一直改Bug?
04-28 707
软件开发常常涉及复杂的业务逻辑,而客户的需求在项目周期内也可能发生变化。因此,即使程序员在开始编写代码时理解了需求,也可能在后续的开发过程中发现原先的设计或代码无法完全满足新的需求,从而需要进行调整。软件开发是一个技术密集型的工作,涉及多种编程语言、框架、库和工具。程序员在编写代码时,可能会遇到技术难题、性能瓶颈或兼容性问题,这都需要通过不断地调试和修改来解决。在大型项目中,多个程序员可能共同负责一个模块或功能。
博客
零基础该如何自学linux运维?
04-28 418
零基础该如何自学linux运维?以下是建议帮助你入门Linux运维的一些建议。
博客
每一个优秀的Java程序员都应该掌握的90条编程法则
04-23 926
笼统地讲,一个包的导出 API,是由该包中的每个公有(public)类或接口中公有的和受保护的(protected)成员及构造器组成的。的第3 版,对上一版进行了全面更新,涵盖了 从Java 5 到Java 9的种种特性,是Java 开发人员不可缺少的一本参考书。包含90 个条目,形式简洁。的第3版,从Java 5 到Java 9的种种特性,Java 开发人员不可缺少的一本参考书:Effective Java中文版(原书第3版),2024全新译本,豆瓣原版评分9.6,中文版9.8。经典Jolt 获奖作品。
博客
如何有效利用chatgpt?
04-23 994
当我们在计算机上打字、发邮件或者与智能手机上的语音助手交互时,会发现这些设备可根据我们输入的文字内容或语音指令,给出相应的回答或建议。这种技术就是自然语言处理技术,而ChatGPT就是一种在自然语言处理领域中非常先进的技术。ChatGPT是一种人工智能技术,它可以理解并生成自然语言。它的全称是“Chat Generative Pre-trained Transformer",它是由OpenAI开发的一个大型语言模型。
博客
什么是人工智能?人工智能、机器学习、深度学习三者之间有什么关系吗?
04-08 1012
我们声称人工智能很有趣, 但是我们还没有描述它是什么。历史上研究人员研究过几种 不同版本的人工智能。有些根据对人类行为的复刻来定义智能, 而另一些更喜欢用“理性” (rationality)来抽象正式地定义智能,直观上的理解是做“正确的事情”。智能主题的本身也各 不相同:一些人将智能视为内部思维过程和推理的属性,而另一些人则关注智能的外部特征, 也就是智能行为。a从人与理性 b 以及思想与行为这两个维度来看,有 4 种可能的组合,而且这 4 种组合都有 其追随者和相应的研究项目。
博客
程序员每天会阅读哪些技术网站来提升自己?
04-03 963
另一项经常在重构时挡道的是临时变量,我需要确保它们的计算次序正确,还得保证其他需要它们的地方能获得其值。但有些参数其实只是一个标记,根据这个标记的不同,函数会有截然不同的行为,此时最好用移除标记参数将不同的行为彻底分开。继承本身是一个强有力的工具,但有时它也可能被用于错误的地方,有时本来适合使用继承的场景变得不再合适——若果真如此,我就会用以委托取代子类或以委托取代超类将继承体系转化成委托调用。书中介绍的规则均来自作者多年的实践经验,涵盖从命名到重构的多个编程方面,虽为一“家”之言,然诚有可资借鉴的价值。
博客
程序员为什么要一直写 bug ?
04-03 1131
为了减少bug的产生,程序员会采取一系列的措施,如编写详细的文档、进行代码审查、编写单元测试和等。同时,他们也会不断学习新的技术和方法,提高自己的编程能力,以减少bug的产生。总的来说,程序员并不是故意写bug的,而是在编程过程中由于各种原因导致bug的产生。他们会尽力避免bug的产生,并采取各种措施来减少bug的数量和影响。
博客
如何系统的入门大模型?
03-22 456
■ GPT-4:仍基于 Transformer 架构,使用前所未有的计算和数据规模进行 训练,展现出比以前的 A I 模型更普遍的智能,不仅精通语言处理,还可以解决 涉及数学、编码、视觉、医学、法律、心理学等各学科的难题, 被誉为“人工 通用智能的灵光闪现”(Sparks of Artificial General Intelligence)。本书将以生动活泼的笔触,将枯燥的技术细节化作轻松幽默的故事和缤纷多彩的图画,引领读者穿梭于不同技术的时空,见证。方法的突破, 能从词频和局部词序列中捕捉词汇的。
博客
学习编程照着别人的代码敲进去有效率吗?
03-20 266
本书的第一部分介绍了基本的Python编程概念,第二部分介绍了一些不同的任务,通过编写Python程序,可以让计算机自动完成它们。学习编程时,照着别人的代码敲进去确实有一定的效率,尤其对于初学者来说,这种方式可以帮助他们熟悉语法、理解程序结构以及掌握基本的编程技巧。因此,在照着敲代码的同时,你也应该思考代码为什么要这样写,是否有更好的方法来实现相同的功能。这是一本经典的C语言入门书籍,它详细介绍了C语言的基本语法、函数、指针等核心概念,并通过丰富的实例帮助读者掌握C语言的编程技巧。
博客
如何用大模型做出一款属于自己的 AI 应用?
03-18 501
不过,如果我们考虑的是最大概率,也就是说,每次都只选择下一 个最大概率的 Token,那么对于同样的给定输入,我们依然会得到相同的对应输 出(可能还是“喜欢你”,也可能不是,具体要看给的语料)。我们这里重点要说的是概率语言模型,它的核 心是概率,准确来说是下一个 Token 的概率。这里的 probs 的每一行就是词表大小的概率分布,概率和为 1 ,意思是根 据当前 Token 生成下一个 Token 的概率,下一个 Token 有可能是词表中的任意一 个 Token,但它们的概率和一定为 1。
博客
代码中的注释有什么作用?
03-17 859
什么也比不上放置良好的注释来得有用。什么也不会比乱七八糟的注释更有本事搞乱一个模块。什么也不会比陈旧、提供错误信息的注释更有破坏性。注释并不像辛德勒的名单。它们并不“纯然地好”。实际上,注释最多也就是一种必须的恶。若编程语言足够有表达力,或者我们长于用这些语言来表达意图,就不那么需要注释——也许根本不需要。注释的恰当用法是弥补我们在用代码表达意图时遭遇的失败。注意,我用了“”一词。我是说真的。注释总是一种失败。我们总无法找到不用注释就能表达自我的方法,所以总要有注释,这并不值得庆贺。
博客
如何看待软件工程师觉得学习算法没用?
03-16 468
再者,软件工程设计概念往往集中于通用的设计原理、模式和标准,其高级的课程介绍适应于大型软件系统的设计和分析技术。软件工程项目往往涉及大量的人员,因此,软件工程师必须理解群体交互的动态性,以了解如何激发所有个人去追求一个共同的目标。软件工程师使用计算机的功能进行工作,并将其作为一般解决方案的一部分,而不是研究计算机本身的理论和结构。基于作者在软件性能优化领域丰富的经验,系统介绍了适用于多种环境的软件性能优化原则和技术,有助于读者理解复杂软件的动态,提高软件的可靠性,解决棘手的性能问题。
博客
架构师的路到底怎么走?
03-16 948
架构活动的作用对象是软件产品,软件产品有对应的生产环境、运行环境、竞争环境 和监管环境,其中生产环境和运行环境是由当前的技术环境决定的,而竞争环境和监管环 境是由整个市场环境决定的。按照实证主义的思维,这些生存法则其实不是定理, 因为它们缺乏严格的推导逻辑,它们更多的是一些假设,这些假设基于多次失败之后总结 和抽象出根因,即过去的失败分类后都与这 6 个要素有关,如果想最大程度避免失败,就要遵守 6 个架构师生存假设。总结一下,架构师在一家企业中,根据企业的战略目标和架构活动的具体目标来制订 架构规划。
博客
10年架构师和CTO经验总结:从程序员到CTO
03-07 1084
本书以架构师工作中的痛点问题为导向,结合大量真实、复杂的案例,帮助架构师提高架构设计能力,规划职业成长路径。本书共4部分,第一部分“架构师的思维模式”介绍3种架构师的思维定式和4种架构活动中常见的思维模式;第二部分“架构师的生存法则”介绍影响架构活动成败的6个要素,以及由其引出的架构师的6条生存法则;第三部分“架构活动中的挑战、根因和应对”介绍架构师在整个架构活动中持续发挥的作用以及架构活动不同阶段常见的问题;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 从零开始用Python3做数据分析 70916
  • 30分钟学会iOS 11开发环境xcode 9图文教程 64286
  • 这本Python入门畅销书《“笨办法”学python 3》,不仅仅是一本书 63211
  • 异步赠书:AI专栏(AI圣经!《深度学习》中文版) 57695
  • 异步赠书:10月Python畅销书升级 46910

分类专栏

  • 计算之魂 2篇
  • linux 17篇
  • 新书书讯 30篇
  • Python 77篇
  • 二进制 1篇
  • 编程语言 104篇
  • 程序人生 30篇
  • 活动 6篇
  • 异步人物专访 7篇
  • 大数据 17篇
  • 安全 9篇
  • 搜索 6篇
  • 编程 60篇
  • 区链块 2篇
  • 深度学习 22篇
  • javascript 9篇
  • tensorflow 1篇
  •  javascript  2篇
  •  CSS 1篇
  • 微服务 17篇
  •  python  3篇
  •  ios   
  •  javascript 1篇
  • 程序员面试 5篇
  • 算法 12篇
  •  ios 2篇
  • github 2篇
  • ios 1篇
  • CPU 2篇
  • DevOps 1篇
  • SQL 4篇
  • GPU 1篇
  • gRPC 1篇
  • 面试 2篇
  •  python 3篇
  • Java 6篇
  • Julia数据科学应用 1篇
  • c 3篇
  • jQuery EasyUI网站开发实战 1篇
  • 性能优化 3篇
  • 区块链 1篇
  • 程序员 26篇
  • 前端 1篇
  • Docker 2篇
  • 架构 3篇
  • 少儿编程 4篇
  • 青少年编程 2篇
  • 容器 3篇
  • 运维 3篇
  • 架构  1篇
  • 自然语言处理 1篇

最新评论

  • 为什么自学编程那么难?

    普通网友: 写的真好,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • 程序员为什么不能一次性写好,需要一直改Bug?

    普通网友: 引领技术潮流,是不可多得的好文,十分值得借鉴和参考。期待博主未来能够持续分享更多好文【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • 什么是人工智能?人工智能、机器学习、深度学习三者之间有什么关系吗?

    ha_lydms: 我很喜欢作者的文风,总能够让我沉浸其中,忘记时间的流逝。

  • 每一个优秀的Java程序员都应该掌握的90条编程法则

    普通网友: 优质好文,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • 自学也能学得会的《零基础入门学习Web开发》(HTML5 & CSS3)

    YUMO66: 求pdf

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 如何学习ai agent?
  • 如何成为一名合格的JAVA程序员?
  • AI Agent: Agent框架+7个实例
2024年34篇
2023年64篇
2022年121篇
2021年168篇
2020年316篇
2019年185篇
2018年249篇
2017年55篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司林芝网站改版报价飞来峡百度标王推荐商丘网站推广方案张北英文网站建设价格松原SEO按天收费哪家好泸州网络推广报价乐山百姓网标王哪家好盘锦SEO按天扣费价格衡水网站制作哪家好镇江网络广告推广推荐信阳优秀网站设计哪家好大鹏企业网站建设价格昌都网站优化排名西宁模板网站建设报价商丘外贸网站设计报价松原SEO按天扣费多少钱巢湖seo网站优化黔南网站搭建报价金华网络营销价格茂名百度竞价包年推广多少钱湛江外贸网站建设价格河池网站开发公司定西建设网站推荐娄底设计网站公司乐山建设网站多少钱昆明外贸网站制作萍乡百度爱采购多少钱永新seo优化哪家好张家口网站推广系统推荐烟台阿里店铺托管推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化