`
阅读更多

     在早期我写过一篇spring social理解的文章,介绍了一些spring social的概念,但是没有提供一个例子。在这篇博客中,提供一个简单的spring social的例子,实现 百度登录,那为什么不实现QQ登录或微信登录,主要是在QQ和微信上申请应用比较麻烦,没有百度方便,在文章的末尾我也放出 QQ登录 和 微信登录 的源码。2018-11-28号增加了一个 github 的登录。

 

实现功能:

     1,实现百度登录

     2,与 spring security 整合

     3,当是第一次使用百度登录时,自动在业务中中创建一个用户。

     4,显示获取到百度用户的用户昵称和图像等

 

与spring security整合注意事项:

    1,在spring security的过滤器链中增加 SocialAuthenticationFilter 来判断用户是否是社交登录,默认拦截 /auth 开头的请求。该过滤器在 SpringSocialConfigurer 类中配置的。

    2,当我们使用百度登录成功后,如何和我们自动业务系统中的userId进行关联,是有UserConnection表进行关联的。

    3,需要实现 SocialUserDetailsService 接口,返回业务系统中的用户信息,用户id就是业务系统中的userId.

 

开发一个社交登录

1,看spring social官网提供的步骤



 

前置条件

1,在百度开发者中心创建一个应用,设置好回调 url , 假设此处为  http://www.huan1993.com/auth/baidu

2,记录好上一步的 apikey 和 securityKey

3,在本地 hosts 文件中配置 127.0.0.1 www.huan1993.com

4,在数据库中创建 UserConnection 表,表名不可变,但是可以加前缀。建表语句在 JdbcConnectionRepository.java 文件下方。这张表维护了  业务系统张三(userId)在百度(providerId)上的唯一用户标识(providerUserId)

 

实现步骤

1,新建 BaiduUserInfo 类,此类是保存着用户在百度上的基本信息

/**
 * 百度的用户信息
 *
 * @author huan.fu
 * @date 2018/9/27 - 16:58
 */
@NoArgsConstructor
@Data
public class BaiduUserInfo {
	@SerializedName("userid")
	private String userId;
	private String username;
	@SerializedName("realname")
	private String realName;
	@SerializedName("userdetail")
	private String userDetail;
	private String birthday;
	private String marriage;
	private String portrait;
	private String sex;
	private String blood;
	private String constellation;
	private String figure;
	private String education;
	private String trade;
	private String job;
	@SerializedName("birthday_year")
	private String birthdayYear;
	@SerializedName("birthday_month")
	private String birthdayMonth;
	@SerializedName("birthday_day")
	private String birthdayDay;
}

 2,新建 Baidu 接口类,申明一个方法用于获取百度的基本信息

/**
 * baidu api 接口
 *
 * @author huan.fu
 * @date 2018/9/27 - 17:00
 */
public interface Baidu {

	/**
	 * 获取百度用户信息
	 *
	 * @return
	 */
	BaiduUserInfo getUserInfo();

}

 3,新建 BaiduTemplate.java 类,获取具体的百度用户信息

/**
 * 百度接口实现,此处用户获取用户在百度上的基本信息
 *
 * @author huan.fu
 * @date 2018/9/27 - 17:01
 */
@Slf4j
public class BaiduTemplate extends AbstractOAuth2ApiBinding implements Baidu {

	@Getter
	private String userInfoUrl;
	@Getter
	private String accessToken;

	public BaiduTemplate(String accessToken, String userInfoUrl) {
		/**
		 * 调用父类 2 个参数的构造方法,
		 * TokenStrategy.ACCESS_TOKEN_PARAMETER 父类会自动将此参数带上,默认是放在请求头Authorization头中
		 */
		super(accessToken, TokenStrategy.OAUTH_TOKEN_PARAMETER);
		this.userInfoUrl = userInfoUrl;
		this.accessToken = accessToken;
	}

	@Override
	public BaiduUserInfo getUserInfo() {
		String userInfo = getRestTemplate().getForObject(String.format(this.getUserInfoUrl(), this.getAccessToken()), String.class);
		log.info("获取的百度用户信息为:[{}]", userInfo);
		return new Gson().fromJson(userInfo, BaiduUserInfo.class);
	}
}

 4,新建 BaiduAdapter.java 类,用于将百度的用户信息转换成Connection的标准信息

/**
 * 百度的 api 适配器
 *
 * @author huan.fu
 * @date 2018/9/27 - 17:10
 */
public class BaiduAdapter implements ApiAdapter<Baidu> {
	@Override
	public boolean test(Baidu api) {
		return true;
	}

	@Override
	public void setConnectionValues(Baidu api, ConnectionValues values) {
		BaiduUserInfo userInfo = api.getUserInfo();
		values.setDisplayName(userInfo.getRealName() == null ? userInfo.getUsername() : userInfo.getRealName());
		values.setImageUrl(String.format("http://tb.himg.baidu.com/sys/portrait/item/%s", userInfo.getPortrait()));
		values.setProfileUrl(null);
		values.setProviderUserId(userInfo.getUserId());
	}

	@Override
	public UserProfile fetchUserProfile(Baidu api) {
		return null;
	}

	@Override
	public void updateStatus(Baidu api, String message) {

	}
}

 5,新建 BaiduOauth2Template.java 类,用于走oauth2授权码流程,获取到真正的访问令牌

/**
 * 走完oauth2流程
 *
 * @author huan.fu
 * @date 2018/9/27 - 17:14
 */
@Slf4j
public class BaiduOauth2Template extends OAuth2Template {

	public BaiduOauth2Template(String clientId, String clientSecret, String authorizeUrl, String accessTokenUrl) {
		super(clientId, clientSecret, authorizeUrl, accessTokenUrl);
		// 设置为true,将客户端凭证作为参数传递给提供者,而不是使用HTTP基本身份验证 createRestTemplate() 此方法中如果useParametersForClientAuthentication=false将会使用basic认证
		setUseParametersForClientAuthentication(true);
	}

	@Override
	public String buildAuthenticateUrl(OAuth2Parameters parameters) {
		StringBuilder builder = new StringBuilder(super.buildAuthenticateUrl(parameters));
		// force_login=1 在百度登录中表示:force_login:非必须参数,如传递“force_login=1”,则加载登录页时强制用户输入用户名和口令,不会从cookie中读取百度用户的登陆状态。
		builder.append("&force_login=1");
		log.info("获取code的访问url:[{}]", builder.toString());
		return builder.toString();
	}
}

 6,创建一个 BaiduServiceProvider.java类 封装 api 和 oauth2template

/**
 * 服务提供商
 *
 * @author huan.fu
 * @date 2018/9/27 - 17:20
 */
@Getter
public class BaiduServiceProvider extends AbstractOAuth2ServiceProvider<Baidu> {

	private String userInfoUrl;

	public BaiduServiceProvider(String clientId, String clientSecret, String userInfoUrl, String authorizeUrl, String accessTokenUrl) {
		super(new BaiduOauth2Template(clientId, clientSecret, authorizeUrl, accessTokenUrl));
		this.userInfoUrl = userInfoUrl;
	}

	@Override
	public Baidu getApi(String accessToken) {
		return new BaiduTemplate(accessToken, this.getUserInfoUrl());
	}
}

 7,创建 BaiduConnectionFactory 用来产生连接

/**
 * 百度 connection fatory
 *
 * @author huan.fu
 * @date 2018/9/27 - 17:22
 */
public class BaiduConnectionFactory extends OAuth2ConnectionFactory<Baidu> {

	public BaiduConnectionFactory(String providerId, String clientId, String userInfoUrl, String clientSecret, String authorizeUrl, String accessTokenUrl) {
		super(
				providerId,
				new BaiduServiceProvider(clientId, clientSecret, userInfoUrl, authorizeUrl, accessTokenUrl),
				new BaiduAdapter()
		);
	}
}

 8,创建 BaiduConnectionSignUp 类用来为用户在业务系统注册一个用户

/**
 * 一个简单的注册处理
 *
 * @author huan.fu
 * @date 2018/9/27 - 17:29
 */
@Slf4j
public class BaiduConnectionSignUp implements ConnectionSignUp {

	/**
	 * 可以在此方法中进行简单的用户注册
	 *
	 * @param connection
	 * @return 用户注册后, 业务系统中的 用户编号
	 */
	@Override
	public String execute(Connection<?> connection) {
		ConnectionData connectionData = connection.createData();
		log.info("用户在系统中是第一次使用百度登录,系统自动给用户进行注册一个用户,返回用户在业务系统中的id:[{}]", connectionData.getProviderUserId());
		return connectionData.getProviderUserId();
	}
}

 9,百度的登录社交配置

    社交登录中需要用到的配置属性

/**
 * 百度 社交登录配置属性
 *
 * @author huan.fu
 * @date 2018/9/27 - 15:30
 */
@ConfigurationProperties(prefix = "spring.social.baidu")
@Data
public class BaiduProperties {
	private String providerId;
	private String clientId;
	private String clientSecret;
	private String userInfoUrl;
	private String authorizeUrl;
	private String accessTokenUrl;
}

   社交登录配置

/**
 * 百度 社交登录的自动配置
 *
 * @author huan.fu
 * @date 2018/9/27 - 17:35
 */
@Configuration
@EnableSocial
@ConditionalOnProperty(prefix = "spring.social.baidu", name = "provider-id")
@AutoConfigureBefore(SocialWebAutoConfiguration.class)
@AutoConfigureAfter(WebMvcAutoConfiguration.class)
public class BaiduAutoAuthConfig extends SocialAutoConfigurerAdapter {

	@Autowired
	private BaiduProperties baiduProperties;

	@Autowired
	private DataSource dataSource;

	@Autowired
	private BaiduAuthenticationSuccessHandlerSuccessHandler baiduAuthenticationSuccessHandlerSuccessHandler;

	@Override
	protected ConnectionFactory<?> createConnectionFactory() {
		return new BaiduConnectionFactory(
				baiduProperties.getProviderId(),
				baiduProperties.getClientId(),
				baiduProperties.getUserInfoUrl(),
				baiduProperties.getClientSecret(),
				baiduProperties.getAuthorizeUrl(),
				baiduProperties.getAccessTokenUrl()
		);
	}

	@Override
	public UsersConnectionRepository getUsersConnectionRepository(ConnectionFactoryLocator connectionFactoryLocator) {
		// 第三个参数表数保存到数据库中的数据是以何种方式进行存储的,此处明文进行存储
		JdbcUsersConnectionRepository jdbcUsersConnectionRepository = new JdbcUsersConnectionRepository(dataSource, connectionFactoryLocator, Encryptors.noOpText());
		// 设置 UserConnection 表的前缀,此处不进行设置
		jdbcUsersConnectionRepository.setTablePrefix("");
		jdbcUsersConnectionRepository.setConnectionSignUp(new BaiduConnectionSignUp());
		return jdbcUsersConnectionRepository;
	}

	/**
	 * 将 spring social 加入到 spring security 的过滤器链中
	 *
	 * @return
	 */
	@Bean
	public SpringSocialConfigurer springSocialConfigurer() {
		return new SpringSocialConfigurer() {
			@Override
			protected <T> T postProcess(T object) {
				SocialAuthenticationFilter filter = (SocialAuthenticationFilter) object;
				filter.setAuthenticationSuccessHandler(baiduAuthenticationSuccessHandlerSuccessHandler);
				return (T) filter;
			}
		};
	}

	/**
	 * 登录帮助类
	 *
	 * @param connectionFactoryLocator
	 * @param usersConnectionRepository
	 * @return
	 */
	@Bean
	public ProviderSignInUtils providerSignInUtils(ConnectionFactoryLocator connectionFactoryLocator, UsersConnectionRepository usersConnectionRepository) {
		return new ProviderSignInUtils(new HttpSessionSessionStrategy(), connectionFactoryLocator, usersConnectionRepository);
	}
}

 10,spring security 配置

 11,登录页面

 12,用户信息显示

 

完整代码

百度登录:https://gitee.com/huan1993/spring-social-parent/tree/feature%2Fbaidu/

github登录:https://gitee.com/huan1993/spring-social-parent/tree/feature%2Fgithub/

QQ登录:https://gitee.com/huan1993/spring-social-parent/tree/feature%2Fqq/

微信登录:https://gitee.com/huan1993/spring-social-parent/tree/feature%2Fweixin/

 百度&QQ&微信登录:https://gitee.com/huan1993/spring-social-parent/tree/master/

 

  • 大小: 70.1 KB
  • 大小: 160.6 KB
  • 大小: 61.7 KB
  • 大小: 835.2 KB
分享到:
评论

相关推荐

    电子设计论文鱼缸水循环自动控制器电子设计论文鱼缸水循环自动控制器

    电子设计论文鱼缸水循环自动控制器电子设计论文鱼缸水循环自动控制器

    AP9569GH-HF-VB一款P-Channel沟道TO252的MOSFET晶体管参数介绍与应用说明

    -40V;-65A;RDS(ON)=10mΩ@VGS=10V;VGS=20V;Vth=-1.6V

    电子设计论文用555电路组成的DC-AC变换器

    电子设计论文用555电路组成的DC-AC变换器

    基于深度学习的看图作诗模型.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    高仿腾讯云小程序一站式解决方案小程序源码学习

    高仿腾讯云小程序一站式解决方案小程序源码学习

    【4层】3100平米综合办公楼毕业设计(含计算书、建筑结构图).zip

    【4层】3100平米综合办公楼毕业设计(含计算书、建筑结构图) 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    JSP学生学籍管理系统(源代码+论文).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 、2项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。、资 5源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。、 5资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    深度学习大作业(基于ResNet网络模型的花卉识别研究).zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    拖动图片到窗口中再拖动回来 js+html

    AveIcon 是一个小巧的 ICO/PNG 互转小工具,有了它你就不用再打开庞大的 Axialis IconWorkshop 了,而且它界面超简洁,只需拖动图片到窗口中再拖动回来,整个转换过程就算完成了。

    机械制造工艺学课程设计 设计挡环零件的机械加工艺规程(完整图纸) .doc.doc

    机械制造工艺学课程设计 设计挡环零件的机械加工艺规程(完整图纸) .doc.doc

    APM2706C-VB一款2个N+P-Channel沟道SOT23-6的MOSFET晶体管参数介绍与应用说明

    ±20V;7 /-4.5A;RDS(ON)=20 / 70mΩ@VGS=4.5V;VGS=20V;Vth=0.71 / -0.81V

    提升基于深度学习的随机数随机性检验的能力.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    机械原理课程设计 自动链条编结机.docx

    机械原理课程设计 自动链条编结机.docx

    基于深度学习的肺炎分类研究.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    上市公司-绿色申请、授权数据(2000-2023年).dta

    上市公司-绿色申请、授权数据(2000-2023年).dta

    机械制造工艺学课程设计 插入耳环加工工艺及铣R12.5键槽的夹具设计.doc

    机械制造工艺学课程设计 插入耳环加工工艺及铣R12.5键槽的夹具设计.doc

    基于深度学习和计算机视觉的实时人体姿态估计技术应用于医疗服务场景.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. *

    首页网站快捷入口js实现 html

    首页网站快捷入口js实现 html,鼠标划过切换

    【Unity精品源码】JU TPS 3 v3.0.52 最新版

    JU TPS 3 是一个专为 Unity 引擎设计的第三人称射击游戏开发套件,它包含了丰富的功能和高度优化的组件,可以帮助开发者节省大量时间,专注于创造独特的游戏体验。 【特点】 1.丰富的游戏元素:JU TPS 3 提供了多种预制的游戏元素,包括角色、武器、车辆和物理效果,这些都是构建第三人称射击游戏的关键部分。 2.优化的性能:套件中的所有资源都经过优化,确保在各种硬件平台上都能流畅运行。 3.易于定制:开发者可以根据自己的需求,轻松定制游戏的外观和行为。 4.物理效果:套件包含了先进的物理效果,使得游戏的交互更加真实和有趣。 使用 JU TPS 3,开发者可以快速开始游戏项目的开发。套件中的资源和工具可以帮助开发者构建游戏世界、角色控制、AI 行为和其他游戏机制。此外,JU TPS 3 还提供了详细的文档和教程,帮助开发者更好地理解和使用套件中的功能。 JU TPS 3 是一个强大的第三人称射击游戏开发套件,它为 Unity 开发者提供了一个快速、高效且功能丰富的平台,以创建引人入胜的游戏体验。无论是独立开发者还是游戏开发团队,JU TPS 3 都是一个值得考虑的选择。

    ... 外方法优化:(1)最早的有将人脸进行五官分区域定位回归,但很容易使最终结果陷入局部最优值而不是全局最优

    。(2)heatmap热图的方法,对数据标签进行处理生成高斯热图,从而更好的回归关键点位置。(3)风格聚合方法,对数据集进行处理生成不同风格的图片,以应对复杂的真实….zip

Global site tag (gtag.js) - Google Analytics