关于from_logits=True和from_logits=False获得针对UNet的tf.losses.CategoricalCrossentropy的不同训练结果的问题就给大家分享到这里,感谢
关于from_logits = True和from_logits =False获得针对UNet的tf.losses.CategoricalCrossentropy的不同训练结果的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于1、求 loss:tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits (logits, labels, name=None))、Android - Log的等级: Verbose,Debug,Info,Warn,Error - ALOGV,ALOGD,ALOGI,ALOGW,ALOGE、android – AlertDialog setTitle()和FragmentDialog中的setMessage等价物、android-Retrofit2 HttpLoggingInterceptor Logcat等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- from_logits = True和from_logits =False获得针对UNet的tf.losses.CategoricalCrossentropy的不同训练结果
- 1、求 loss:tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits (logits, labels, name=None))
- Android - Log的等级: Verbose,Debug,Info,Warn,Error - ALOGV,ALOGD,ALOGI,ALOGW,ALOGE
- android – AlertDialog setTitle()和FragmentDialog中的setMessage等价物
- android-Retrofit2 HttpLoggingInterceptor Logcat
from_logits = True和from_logits =False获得针对UNet的tf.losses.CategoricalCrossentropy的不同训练结果
如果我Softmax Activation
像这样设置最后一层,我正在用unet进行图像语义分割工作:
...conv9 = Conv2D(n_classes, (3,3), padding = ''same'')(conv9)conv10 = (Activation(''softmax''))(conv9)model = Model(inputs, conv10)return model...
然后使用即使只有一个训练图像loss =tf.keras.losses.CategoricalCrossentropy(from_logits=False)
,训练也 不会收敛 。
但是,如果我没有Softmax Activation
像这样设置最后一层:
...conv9 = Conv2D(n_classes, (3,3), padding = ''same'')(conv9)model = Model(inputs, conv9)return model...
然后使用loss = tf.keras.losses.CategoricalCrossentropy(from_logits=True)
训练将
收敛 为一个训练图像。
我的groundtruth数据集是这样生成的:
X = []Y = []im = cv2.imread(impath)X.append(im)seg_labels = np.zeros((height, width, n_classes))for spath in segpaths: mask = cv2.imread(spath, 0) seg_labels[:, :, c] += maskY.append(seg_labels.reshape(width*height, n_classes))
为什么?我的用法有问题吗?
这是我的git实验代码:https :
//github.com/honeytidy/unet
您可以检出并运行(可以在cpu上运行)。您可以更改激活层和CategoricalCrossentropy的from_logits并查看我说的内容。
答案1
小编典典将“ softmax”激活推入交叉熵损失层可大大简化损失计算并使其在数值上更稳定。
在您的示例中,可能存在这样的情况:数字问题足够严重,导致培训过程对该from_logits=False
选项无效。
1、求 loss:tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits (logits, labels, name=None))
1.求loss:
tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None))
第一个参数logits:就是神经网络最后一层的输出,如果有batch的话,它的大小就是[batchsize,num_classes],单样本的话,
大小就是
num_classes
第二个参数labels:实际的标签,大小同上
具体的执行流程大概分为两步:
第一步是先对网络最后一层的输出做一个softmax,这一步通常是求取输出属于某一类的概率,对于单样本而言,输出就是一个
大小的向量num_classes
([Y1,Y2,Y3...]其中Y1,Y2,Y3...分别代表了是属于该类的概率
第二步是
softmax的输出向量[Y1,Y2,Y3...]和样本的实际标签做一个交叉熵,公式如下:
其中
指代实际的标签中第i个的值(用mnist数据举例,如果是3,那么标签是[0,0,0,1,0,0,0,0,0,0],除了第4个值为1,其他全为0)
中,第 i 个元素的值就是
softmax的输出向量[Y1,Y2,Y3...]
显而易见,预测
越准确,结果的值越小(别忘了前面还有负号),最后求一个平均,得到我们想要的loss
注意!!!这个函数的返回值并不是一个数,而是一个向量,如果要求交叉熵,
我们要再做一步tf.reduce_sum操作,就是对向量里面所有元素求和,
最后才得到
,如果求loss,则要做一步
tf.reduce_mean操作,对向量求均值!
import tensorflow as tf
logits=tf.constant([[1.0,2.0,3.0],[1.0,2.0,3.0],[1.0,2.0,3.0]])
y=tf.nn.softmax(logits)
y_=tf.constant([[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0]])
cross_entropy = -tf.reduce_sum(y_*tf.log(y)) #交叉熵公式
cross_entropy2=tf.reduce_sum(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y_))#代入函数
with tf.Session() as sess:
softmax=sess.run(y)
c_e = sess.run(cross_entropy)
c_e2 = sess.run(cross_entropy2)
print("step1:softmax result=")
print(softmax)
print("step2:cross_entropy result=")
print(c_e)
print("Function(softmax_cross_entropy_with_logits) result=")
print(c_e2)
step1:softmax result=
[[0.09003057 0.24472848 0.66524094]
[0.09003057 0.24472848 0.66524094]
[0.09003057 0.24472848 0.66524094]]
step2:cross_entropy result=
1.222818
Function(softmax_cross_entropy_with_logits) result=
1.2228179
Android - Log的等级: Verbose,Debug,Info,Warn,Error - ALOGV,ALOGD,ALOGI,ALOGW,ALOGE
http://blog.csdn.net/liuxd3000/article/details/13768141
1、 目的:
为了规范软件工程师在Android代码编写过程中输出Log的行为,使得发布的产品中打印的Log是必须的,打印的Log的级别是能真实反映此Log对应的级别,标签、Log内容具有很好的可读性。
2、 适用范围
android平台Java、c++、c代码编写。
3、 Log的调用及等级介绍
(1)、Log的等级有Verbose,Debug,Info,Warn,Error。
(2)、java层调用:在java层调用import android.util.Log,在需要打印Log的地方执行Log.v,Log.d,Log.i,Log.w,Log.e.
(3)、c、c++层调用:在c,c++层包含此头文件:#include <cutils/log.h>,在需要调用Log的地方执行:ALOGV,ALOGD,ALOGI,ALOGW,ALOGE。
(4)、各个Log等级的使用
Verbose: 开发调试过程中一些详细信息,不应该编译进产品中,只在开发阶段使用。(参考api文档的描述:Verbose should never be compiled into anapplication except during development)
Debug: 用于调试的信息,编译进产品,但可以在运行时关闭。(参考api文档描述:Debug logs are compiled in but stripped atruntime)
Info:例如一些运行时的状态信息,这些状态信息在出现问题的时候能提供帮助。
Warn:警告系统出现了异常,即将出现错误。
Error:系统已经出现了错误。
Info、Warn、Error这三个等级的Log的警示作用依次提高,需要一直保留。这些信息在系统异常时能提供有价值的分析线索。
4、 具体规则
(1)、Verbose等级的Log,请不要在user版本中出现。Verbose级别的Log输出参见下面例子。
示例Java部分:
import android.os.Build;
import android.util.Log
final public Boolean isEng =Build.TYPE.equals("eng");
if (isEng)
Log.v(“LOG_TAG”,“LOG_MESSAGE”);
示例c、c++部分:
#include<cutils/log.h>
char value[PROPERTY_VALUE_MAX];
int isEng=0;
property_get("ro.build.type",value, "user");
isEng=strcmp(value, "eng");
if (isEng)
ALOGV();
(2)、Debug等级的log,默认不开启,通过终端命令开启。
Debug级别的log输出参见下面例子。
示例Java部分:
import android.util.Log
final String TAG=”MyActivity”;
final public Boolean LOG_DEBUG = Log.isLoggable(TAG, Log.DEBUG);
if (LOG_DEBUG)
Log.d(“LOG_TAG”,“LOG_MESSAGE”);
运行时开启log: 在终端输入:setprop log.tag.MyActivity DEBUG
运行时关闭log: 在终端输入:setprop log.tag.MyActivity INFO
示例c、c++部分:
#include<cutils/log.h>
#defineLOG_CTL “debug.MyActivity.enablelog”
charvalue[PROPERTY_VALUE_MAX];
int isDebug=0;
property_get(LOG_CTL,value, "0");
isDebug=strcmp(value,"1");
if (isDebug)
ALOGD();
运行时开启log: 在终端输入:setpropdebug.MyActivity.enablelog 1
运行时关闭log: 在终端输入:setpropdebug.MyActivity.enablelog 0
(3)、Info、Warn、Error等级的Log禁止作为普通的调试信息使用,这些等级的Log是系统出现问题时候的重要分析线索,如果随意使用,将给Log分析人员带来极大困扰。请参考前面的等级介绍合理使用。
(4)、禁止使用new Exception("print trace").printStackTrace()或者Log. getStackTraceString(Exception)方式打印普通调试信息,因为这种方式打印Log非常消耗系统资源。此种方式打印Log一般只出现try..catch某个异常使用。
(5)、Log的tag命名,使用Activity名称或者类、模块的名称,不要出现自己的姓名拼音或其他简称。在c++/c代码中调用ALOGD等宏函数,参数没有传入tag,需要在文件头部#define LOG_TAG"YOUR_TAG_NAME"。
(6)、Log的内容,不要出现公司名称、个人名称或相关简称,Log内容不要出现无意义的内容,如连续的等号或星号或连续的数字等,Log内容要方便其他分析Log的人员查看。
(7)、Log输出的频率需要控制,例如1s打印一次的Log,尽量只在eng版本使用,user版本如需开启,请默认关闭,通过设置setprop命令来开启。
android – AlertDialog setTitle()和FragmentDialog中的setMessage等价物
AlertDialog dialog = getDialog(); if (some condition) { dialog.setTitle(R.string.error1); dialog.setMessage(getResources().getString(R.string.error1_msg)); } else { dialog.setTitle(R.string.error2); dialog.setMessage(getResources().getString(R.string.error2_msg)); }
但是,现在我们正在使用DialogFragment,没有setTitle()或setMessage()的方法,因此我们无法在创建后更改它.这种情况有解决方法,还是我们运气不好?
解决方法
android-Retrofit2 HttpLoggingInterceptor Logcat
可能是一个新手问题,但我想知道我实际上在哪里捕获了log cat中的日志.有没有放置日志的地方,要使用的特殊正则表达式等?这就是我的拦截器的样子:
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okClient = new OkHttpClient.Builder().addInterceptor(interceptor).build();
// Retrofit setup
Retrofit client = new retrofit2.Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okClient)
.build();
这是一个API调用,其中body为null
retrofit2.Call<GeneralTokenResponse> generalTokenResponseCall = ApiInterface.getGeneralAccesstoken(ApiGeneral.API_VERSION);
generalTokenResponseCall.enqueue(new retrofit2.Callback<GeneralTokenResponse>() {
@Override
public void onResponse(retrofit2.Call<GeneralTokenResponse> call, retrofit2.Response<GeneralTokenResponse> response) {
Log.d("DEBUG", "body: "+response.body());
}
@Override
public void onFailure(retrofit2.Call<GeneralTokenResponse> call, Throwable t) {
}
});
解决方法:
我这样使用:
// init okhttp 3 logger
HttpLoggingInterceptor logging = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override public void log(String message) {
Log.d("mytag", "OkHttp: " + message);
}
});
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
关于from_logits = True和from_logits =False获得针对UNet的tf.losses.CategoricalCrossentropy的不同训练结果的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于1、求 loss:tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits (logits, labels, name=None))、Android - Log的等级: Verbose,Debug,Info,Warn,Error - ALOGV,ALOGD,ALOGI,ALOGW,ALOGE、android – AlertDialog setTitle()和FragmentDialog中的setMessage等价物、android-Retrofit2 HttpLoggingInterceptor Logcat等相关知识的信息别忘了在本站进行查找喔。
本文标签: