小编Zar*_*uta的帖子

Keras的损失函数和指标有什么区别?

我不清楚Keras中损失函数和指标之间的区别.该文档对我没有帮助.

machine-learning neural-network deep-learning keras

26
推荐指数
3
解决办法
9789
查看次数

为什么我们要在Keras中对深度学习的数据进行标准化?

我正在测试Keras中的一些网络架构,用于对MNIST数据集进行分类.我已经实现了一个类似于LeNet的.

我似乎在我在互联网上找到的例子中,有一个数据规范化的步骤.例如:

X_train /= 255

我已经进行了没有这种规范化的测试,我似乎已经降低了网络的性能(准确性)(保持相同的时期数).为什么会这样?

如果我增加了纪元的数量,精度可以达到通过标准化训练的模型所达到的水平?

那么,归一化会影响准确性,还是仅影响训练速度?

我的培训脚本的完整源代码如下:

from keras.models import Sequential
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.layers.core import Activation
from keras.layers.core import Flatten
from keras.layers.core import Dense
from keras.datasets import mnist
from keras.utils import np_utils
from keras.optimizers import SGD, RMSprop, Adam
import numpy as np
import matplotlib.pyplot as plt
from keras import backend as k


def build(input_shape, classes):
    model = Sequential()

    model.add(Conv2D(20, kernel_size=5, padding="same",activation='relu',input_shape=input_shape))
    model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))

    model.add(Conv2D(50, kernel_size=5, padding="same", activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2), …
Run Code Online (Sandbox Code Playgroud)

machine-learning neural-network deep-learning conv-neural-network keras

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

在 C 中生成闭区间内的随机值的最佳方法是什么?

一般来说,当我需要在 C 中的闭区间内生成随机值(将 B 视为区间的开始,将 E 视为区间的结束)时,我使用以下方法之一:

方法一:

n = round(B + ( (float)rand() / RAND_MAX ) * (E - B));
Run Code Online (Sandbox Code Playgroud)

方法2:

n = B + rand()%(E - B+1);
Run Code Online (Sandbox Code Playgroud)

他们都考虑用函数 time() 初始化随机种子:

srand(time(NULL));
Run Code Online (Sandbox Code Playgroud)

在 Linux 系统中,这两种方法似乎都足以生成有趣的随机值。然而,在Windows系统中,有时数字显得不够随机。

研究这些系统,我发现 RAND_MAX 的值是不同的。在我测试过的Linux系统中,RAND_MAX是2147483647。在这些行为不太好的Windows系统中,RAND_MAX是32767。

我认为使用更大的 RAND_MAX 值我们可以生成更好的随机数。但我不确定。

考虑到这一点,我的问题是:是否有一些好方法可以生成在所有系统上都运行良好的有趣随机数(在闭区间内)?

除此之外,我的方法 1 和 2 是在闭区间内生成随机数的好方法吗?

c random algorithm

5
推荐指数
0
解决办法
549
查看次数

Bash 关联数组中带空格的键

我正在尝试将结构化文件读入 Bash 中的关联数组。该文件在每一行中存储一个人名和一个人地址。例如:

person1|address1
person2|address2
...
personN|addressN
Run Code Online (Sandbox Code Playgroud)

我正在使用下面的脚本。

#!/bin/bash
declare -A address
while read line
do
    name=`echo $line | cut -d '|' -f 1`
    add=`echo $line | cut -d '|' -f 2`
    address[$name]=$add
    echo "$name - ${address[$name]}"
done < adresses.txt

for name in ${!address[*]}
do
    echo "$name - ${address[$name]}"
done
Run Code Online (Sandbox Code Playgroud)

脚本正常工作。但是,在 FOR 循环中,当人名有空格(例如“John Nobody”)时,我遇到了一些问题。我怎样才能解决这个问题?

linux arrays bash shell ubuntu

3
推荐指数
1
解决办法
2928
查看次数

fopen 中的 r+ 和 a+ 有什么区别?

我不明白 c 中 fopen 中 r+ 和 a+ 之间的实际区别是什么。有人能帮我吗?

c io file

3
推荐指数
1
解决办法
5109
查看次数

在哪个C标准版本中,可变长度数组不是语言的一部分,必需的或可选的?

让我们考虑以下代码:

#include <stdio.h>

int main(){
    int size,i;
    scanf("%d",&size);
    int x[size];

    for(i=0;i<size;i++){
        x[i] = i;
    }

    for(i=0;i<size;i++){
        printf("%d\n", x[i]);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为有些版本无法使用定义变量大小的变量声明数组,例如:

int x[size];
Run Code Online (Sandbox Code Playgroud)

但是我不确定是哪个版本。这在所谓的ANSI C中是允许的吗?

c

3
推荐指数
2
解决办法
168
查看次数

在 C 中将 float 表达式的结果存储到 int 变量中的正确方法是什么?

让我们考虑下面的代码:

#include <stdio.h>
int main()
{
    float dollars;
    int cents;

    dollars = 159.95;
    cents = dollars*100;

    printf("Dollars:%f\tCents:%d\n",dollars,cents);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出将是:

Dollars: 159.949997    Cents:15995
Run Code Online (Sandbox Code Playgroud)

据我所知,159.95 没有精确的二进制表示。但我不确定为什么值 15995 存储在变量 cents 中。

我想知道在这些情况下是否需要在表达式中使用 round,这样:

cents = round(dollars*100);
Run Code Online (Sandbox Code Playgroud)

处理这些案例的最佳做法是什么?

请注意,这个使用货币的示例只是一个示例。我想讨论一下一般情况。是否有进行此类操作的一般最佳实践?

c floating-point types

3
推荐指数
1
解决办法
849
查看次数

在C中以文本或二进制模式打开文件会产生什么后果?

我想知道我们用于在 C 中打开文件的模式(文本或二进制)是否真的很重要。

例如,一般情况下,我们使用fread和fwrite来进行二进制模式的读写。当我们以文本模式打开文件时可以使用这些函数吗?

除此之外,一般情况下,我们可以使用fscanf和fprintf来进行文本模式的读写。如果我们以二进制模式打开文件,可以使用这些函数吗?

以文本或二进制模式打开文件会产生什么后果?

c io binaryfiles file text-files

2
推荐指数
1
解决办法
600
查看次数

如果float有6位精度,为什么我们可以用printf显示超过6位的浮点数?

让我们考虑下面的代码:

#include <stdio.h>
int main()
{
    float x = 0.33;
    printf("%.100f",x);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果float有6位精度,那么如何用 来显示超过6位的数字printf

c floating-point precision

2
推荐指数
1
解决办法
432
查看次数

在Bash中将文件读入关联数组

我正在尝试使用Bash脚本将结构化文件的信息读入关联数组.该文件在每行中包含一个人的姓名及其地址,以"|"分隔.例如:

person1|address of person1
person2|address of person2
...
personN|address of personN
Run Code Online (Sandbox Code Playgroud)

我尝试使用下面的脚本执行此操作.在WHILE循环中,正在打印信息.但是,在FOR循环中,不打印信息.似乎信息没有存储在WHILE循环之外的关联数组中.

我究竟做错了什么?为什么这不起作用?有更有效的方法吗?

#!/bin/bash
declare -A address
cat adresses.txt | while read line
do
    name=`echo $line | cut -d '|' -f 1`
    add=`echo $line | cut -d '|' -f 2`
    address[$name]=$add
    echo "$name - ${address[$name]}"
done

for name in ${!address[*]}
do
    echo "$name - ${address[$name]}"
done
Run Code Online (Sandbox Code Playgroud)

linux arrays bash shell

1
推荐指数
2
解决办法
2999
查看次数

为什么在 C 语言中可以通过指针交换字符串?

据我所知,当我们创建数组或字符串时,它们的名称是指向其第一个元素的指针。在这种情况下,指针无法更改。

然而,这段代码可以工作:

#include <stdio.h>

void swapString(char **str1_ptr, char **str2_ptr)
{
    char *temp = *str1_ptr;
    *str1_ptr = *str2_ptr;
    *str2_ptr = temp;
}

int main()
{
    char strings[][30] = {"Test1","Test2","Test3"};
    int i;
    
    swapString((char **)&strings[0],(char **)&strings[1]);
    
    for(i=0;i<3;i++){
        printf("%s\n",strings[i]);
    }
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么这个效果很好?以这种方式交换字符串(或一般的数组)是一个好习惯吗?什么时候使用这种方法不是一个好主意?

c arrays string pointers

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

如果我声明一个已在 C 包含的头文件中声明的函数,会发生什么情况?

让我们假设下面的代码:

#include <stdio.h>
#include <math.h>

int abs(int x){
    return x*2;
}

int main(){
    printf("%d\n",abs(-2));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我编译并执行它时,我注意到正在使用math.h的abs函数。实际上,即使我删除#include <math.h>,也会发生这种情况。但我不明白这里发生了什么。

c

-2
推荐指数
1
解决办法
52
查看次数