小编o_y*_*eah的帖子

Keras softmax 输出和准确性

这是 Keras 模型的最后一层。

model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)

我知道softmax层的输出是一个数组,概率之和为1,比如[0.1, 0.4, 0.5]

我有一个关于使用准确性作为指标的问题。

例如,当真实类别为[0, 0, 1]且预测概率为 时[0.1, 0.4, 0.5],即使0.5是最大概率,该预测的准确性也应该为0,因为0.5 != 1。那是对的吗?

更一般地,当输出层激活为 时softmax,我们通常会得到浮动概率预测,并且很少有机会得到像 那样的整数概率预测 [0, 0, 1]。所以我们在用作激活时不能用作accuracy指标。softmax那是对的吗?

python neural-network keras tensorflow

7
推荐指数
1
解决办法
3166
查看次数

.h 文件中声明的函数在哪里找到其定义?

我是 C 编程新手,对头文件包含部分有疑问。

(1) 我知道按照惯例,头文件不应包含函数定义。但在这个简单的代码中:

#include<stdio.h>
int main(){
    printf("123");
}
Run Code Online (Sandbox Code Playgroud)

printf函数在 中声明stdio.h,但是我没有手动定义该printf函数。为什么代码可以编译成功?它不应该抛出类似的编译错误吗function printf is not defined

(2) 假设我有一个foo.h头文件,其中声明了函数foo

int foo(int num);
Run Code Online (Sandbox Code Playgroud)

main.c我在同一目录中有一个以下文件foo.h

#include <stdio.h>
#include "foo.h"
int main(){
    printf("%d",foo(123));
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我应该在哪里定义函数foo?除了里面还有别的地方吗main.c

如果不是,那么使用头文件有什么意义呢?因为在我看来,就像:每次我们想要实现在头文件中声明的函数时,我们都必须在文件中定义它.cfoo为什么不直接在, 中定义(并声明)函数main.c

c compilation

6
推荐指数
1
解决办法
1938
查看次数

在 Cython 类中,使用 __init__ 和 __cinit__ 有什么区别?

代码块 1 使用 __init__

%%cython -3
cdef class c:
    cdef:
        int a
        str s
    def __init__(self):
        self.a=1
        self.s="abc"
    def get_vals(self):
        return self.a,self.s
m=c()
print(m.get_vals())
Run Code Online (Sandbox Code Playgroud)

代码块 2 使用 __cinit__

%%cython -3
cdef class c:
    cdef:
        int a
        str s
    def __cinit__(self):  # cinit here
        self.a=1
        self.s="abc"
    def get_vals(self):
        return self.a,self.s
m=c()
print(m.get_vals())
Run Code Online (Sandbox Code Playgroud)
  1. 我测试了这两个代码,并且都运行没有错误。在这种情况下,使用__cinit__而不是有__init__什么意义?

  2. 看了官方文章,被一句话搞糊涂了:

    如果需要将修改后的参数列表传递给基类型,则必须在方法中执行相关部分的初始化__init__(),其中适用于调用继承方法的正常规则。

“修改后的论点”是什么意思?在这里,为什么我应该使用 init 而不是 cinit?

python oop class cython

5
推荐指数
1
解决办法
1064
查看次数

C++中'\0'的解释

#include<iostream>
#include<string>
using namespace std;
int main(){
    string i = "abc\0defg";
    cout<<i<<endl;
    // This prints "abc"

    string x = "abcdefg";
    x[3]='\0';
    cout << x << endl;
    // This prints "abcefg"
}
Run Code Online (Sandbox Code Playgroud)

我知道iC++ String 类的实例不会解释\0为字符串的结尾。为什么字符串i\0?之后遗漏了所有内容?stringi和 和有x什么不一样?

c++ string

4
推荐指数
1
解决办法
100
查看次数

标签 统计

python ×2

c ×1

c++ ×1

class ×1

compilation ×1

cython ×1

keras ×1

neural-network ×1

oop ×1

string ×1

tensorflow ×1