深度学习入门与常用模型解析:从视觉计算论坛SIGVC.BBS的心得分享

5星 · 超过95%的资源 需积分: 9 18 下载量 129 浏览量 更新于2024-07-25 收藏 2.11MB DOCX 举报
深度学习学习心得资料深入探讨了深度学习在当今机器学习领域的核心地位和研究趋势。该系列由Zouxy整理,基于网络上众多专家的共享资源,旨在为读者提供一个入门到进阶的理解深度学习的框架。 首先,作者从人工智能的宏大视角出发,强调了深度学习的重要性,尽管目前机器学习技术尚未实现像人类自我意识那样的突破。深度学习被定义为一种模仿人脑处理复杂信息的能力,尤其是通过多层次的神经网络结构来提取高级抽象特征。 章节二至四主要关注人脑视觉机制的启示,探讨了特征表示的不同层次和粒度。特征表示包括初级(浅层)特征,如边缘、纹理等简单元素,以及结构性特征,如物体的形状和空间关系。讨论了特征数量的需求,强调了在深度学习中,合适的特征选择对于性能至关重要。 第五部分阐述了深度学习的基本思想,即通过多层神经网络模拟大脑的分层处理,从而解决传统浅层学习难以处理的复杂问题。深度学习通过自动学习抽象层次的表示,减少了人工特征工程的负担。 第六章对比了浅层学习与深度学习的区别,前者通常涉及较少的层次,而后者则能处理更深层次的模式识别。深度学习的优势在于其强大的表征学习能力,能够处理高维度和非线性数据。 第八章详细介绍了深度学习的训练过程,区分了传统的反向传播法和深层模型的训练策略,如使用AutoEncoder进行无监督预训练,以及Restricted Boltzmann Machine (RBM) 和 Deep Belief Networks (DBN) 的训练方法。同时,卷积神经网络(Convolutional Neural Networks, CNN)也被作为重要的深度学习模型提及。 第九章专门介绍几种深度学习的核心模型和技术,包括AutoEncoder用于降维和特征学习,Sparse Coding用于稀疏表示,RBM用于概率建模,DBN用于生成模型的堆叠,以及CNN在图像识别中的广泛应用。 最后,作者总结了深度学习的发展现状和未来展望,提醒读者不断学习和探索,因为这个领域仍在快速发展,新的模型和技术不断涌现。此外,作者提供了参考文献和进一步学习的资源,鼓励读者深化对深度学习的理解,共同推动科研进步。 这是一份全面且实用的深度学习学习资料,适合有基础的机器学习、计算机视觉或神经网络背景的读者,无论你是初学者还是希望提升技能的专业人士,都能从中受益匪浅。

逐行详细解释以下代码并加注释from tensorflow import keras import matplotlib.pyplot as plt base_image_path = keras.utils.get_file( "coast.jpg", origin="https://img-datasets.s3.amazonaws.com/coast.jpg") plt.axis("off") plt.imshow(keras.utils.load_img(base_image_path)) #instantiating a model from tensorflow.keras.applications import inception_v3 model = inception_v3.InceptionV3(weights='imagenet',include_top=False) #配置各层对DeepDream损失的贡献 layer_settings = { "mixed4": 1.0, "mixed5": 1.5, "mixed6": 2.0, "mixed7": 2.5, } outputs_dict = dict( [ (layer.name, layer.output) for layer in [model.get_layer(name) for name in layer_settings.keys()] ] ) feature_extractor = keras.Model(inputs=model.inputs, outputs=outputs_dict) #定义损失函数 import tensorflow as tf def compute_loss(input_image): features = feature_extractor(input_image) loss = tf.zeros(shape=()) for name in features.keys(): coeff = layer_settings[name] activation = features[name] loss += coeff * tf.reduce_mean(tf.square(activation[:, 2:-2, 2:-2, :])) return loss #梯度上升过程 @tf.function def gradient_ascent_step(image, learning_rate): with tf.GradientTape() as tape: tape.watch(image) loss = compute_loss(image) grads = tape.gradient(loss, image) grads = tf.math.l2_normalize(grads) image += learning_rate * grads return loss, image def gradient_ascent_loop(image, iterations, learning_rate, max_loss=None): for i in range(iterations): loss, image = gradient_ascent_step(image, learning_rate) if max_loss is not None and loss > max_loss: break print(f"... Loss value at step {i}: {loss:.2f}") return image #hyperparameters step = 20. num_octave = 3 octave_scale = 1.4 iterations = 30 max_loss = 15. #图像处理方面 import numpy as np def preprocess_image(image_path): img = keras.utils.load_img(image_path) img = keras.utils.img_to_array(img) img = np.expand_dims(img, axis=0) img = keras.applications.inception_v3.preprocess_input(img) return img def deprocess_image(img): img = img.reshape((img.shape[1], img.shape[2], 3)) img /= 2.0 img += 0.5 img *= 255. img = np.clip(img, 0, 255).astype("uint8") return img #在多个连续 上运行梯度上升 original_img = preprocess_image(base_image_path) original_shape = original_img.shape[1:3] successive_shapes = [original_shape] for i in range(1, num_octave): shape = tuple([int(dim / (octave_scale ** i)) for dim in original_shape]) successive_shapes.append(shape) successive_shapes = successive_shapes[::-1] shrunk_original_img = tf.image.resize(original_img, successive_shapes[0]) img = tf.identity(original_img) for i, shape in enumerate(successive_shapes): print(f"Processing octave {i} with shape {shape}") img = tf.image.resize(img, shape) img = gradient_ascent_loop( img, iterations=iterations, learning_rate=step, max_loss=max_loss ) upscaled_shrunk_original_img = tf.image.resize(shrunk_original_img, shape) same_size_original = tf.image.resize(original_img, shape) lost_detail = same_size_original - upscaled_shrunk_original_img img += lost_detail shrunk_original_img = tf.image.resize(original_img, shape) keras.utils.save_img("DeepDream.png", deprocess_image(img.numpy()))

2023-06-07 上传