如何在java程序中手动初始化log4j.xml?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在java程序中手动初始化log4j.xml?相关的知识,希望对你有一定的参考价值。
我写了一个java程序,并配了一个log4j.xml。可是我这个程序是一个朴素的java程序,不是一个网络应用程序,没有用到任何框架。在struts里,这个log4j.xml大概是有办法可以配的,可是在我这个java程序里,我怎么用这个log4j.xml来初始化log4j环境呢?
难道要用我自己在程序里解析这个xml文件,用里面的配置自己手动new出一些log4j的类不成?这样可能能行,但是也太不优雅了吧?
请达人赐教啊,呵呵。
把log4j.properties复制到程序的src目录下就可以了。
提供一个简单的log4j.properties配置文件实例:
log4j.rootCategory=DEBUG, stdout, host
log4j.appender.stdout.threshold=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%dhh:mm:ss.SSS %-5p: %m%n
#key infomation
log4j.appender.host.threshold=DEBUG
log4j.appender.host=org.apache.log4j.DailyRollingFileAppender
log4j.appender.host.file=../logs/log.txt
log4j.appender.host.datePattern='.'yyyy-MM-dd
log4j.appender.host.layout=org.apache.log4j.PatternLayout
log4j.appender.host.layout.ConversionPattern=%dyyyy-MM-dd HH:mm:ss.SSS %-5p: %m%n
log4j.logger.com.mchange.v2=OFF
#log4j.logger.com.sunyard.common.dbutil=OFF 参考技术B DOMConfigurator.config(filename);
适用于xml配置文件
如果是properties配置文件则用
PropertyConfigurator.configure(filename);本回答被提问者采纳 参考技术C 加入log4j的jar包,然后下面:
public class Main
/**
* log日志
*/
public Logger log = Logger.getLogger("Main");
/**
*
* 读取日志的配置文件
*
* @see: 参照的方法
* @author:
*/
public void init()
PropertyConfigurator.configure("log4j.properties");
/**
*
* 主方法
*
* @param args
* @see: 参照的方法
* @author:
*/
public static void main(String[] args)
Main main = new Main();
//初始化
main.init();
try
main.log.info("日志信息);
catch (SystemException e)
main.log.error("------".concat(e.getMessage()).concat("------"));
System.exit(0);
如何在pytorch中手动应用渐变
【中文标题】如何在pytorch中手动应用渐变【英文标题】:how to apply gradients manually in pytorch 【发布时间】:2018-08-15 17:00:29 【问题描述】:开始学习pytorch并尝试做一些非常简单的事情,尝试将随机初始化的大小为5的向量移动到值为[1,2,3,4,5]的目标向量。
但是我的距离并没有减少!!而我的矢量x
简直发疯了。不知道我错过了什么。
import torch
import numpy as np
from torch.autograd import Variable
# regress a vector to the goal vector [1,2,3,4,5]
dtype = torch.cuda.FloatTensor # Uncomment this to run on GPU
x = Variable(torch.rand(5).type(dtype), requires_grad=True)
target = Variable(torch.FloatTensor([1,2,3,4,5]).type(dtype),
requires_grad=False)
distance = torch.mean(torch.pow((x - target), 2))
for i in range(100):
distance.backward(retain_graph=True)
x_grad = x.grad
x.data.sub_(x_grad.data * 0.01)
【问题讨论】:
我的回答能解决你的问题吗?为什么不提供任何反馈? 【参考方案1】:您的代码中有两个错误会阻止您获得所需的结果。
第一个错误是您应该将距离计算放在循环中。因为在这种情况下,距离就是损失。所以我们必须在每次迭代中监控它的变化。
第二个错误是您应该手动将x.grad
归零,因为pytorch won't zero out the grad in variable by default。
以下是按预期工作的示例代码:
import torch
import numpy as np
from torch.autograd import Variable
import matplotlib.pyplot as plt
# regress a vector to the goal vector [1,2,3,4,5]
dtype = torch.cuda.FloatTensor # Uncomment this to run on GPU
x = Variable(torch.rand(5).type(dtype), requires_grad=True)
target = Variable(torch.FloatTensor([1,2,3,4,5]).type(dtype),
requires_grad=False)
lr = 0.01 # the learning rate
d = []
for i in range(1000):
distance = torch.mean(torch.pow((x - target), 2))
d.append(distance.data)
distance.backward(retain_graph=True)
x.data.sub_(lr * x.grad.data)
x.grad.data.zero_()
print(x.data)
fig, ax = plt.subplots()
ax.plot(d)
ax.set_xlabel("iteration")
ax.set_ylabel("distance")
plt.show()
以下是距离 w.r.t 迭代的图
我们可以看到模型在大约 600 次迭代时收敛。如果我们将学习率设置得更高(例如 lr=0.1),模型的收敛速度会更快(大约需要 60 次迭代,见下图)
现在,x 变成了下面的样子
0.9878 1.9749 2.9624 3.9429 4.9292
这非常接近您的目标 [1, 2, 3, 4, 5]。
【讨论】:
以上是关于如何在java程序中手动初始化log4j.xml?的主要内容,如果未能解决你的问题,请参考以下文章