Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用RNN生成文本时,它总是预测相同的字母_Python_Tensorflow_Machine Learning_Keras_Recurrent Neural Network - Fatal编程技术网

Python 使用RNN生成文本时,它总是预测相同的字母

Python 使用RNN生成文本时,它总是预测相同的字母,python,tensorflow,machine-learning,keras,recurrent-neural-network,Python,Tensorflow,Machine Learning,Keras,Recurrent Neural Network,我正在尝试使用RNN创建一个简单的文本名生成器。我很好地创建了模型,但当我尝试预测值时,我总是得到相同的字母 我的代码如下: from tensorflow.keras.activations import softmax from tensorflow.keras.losses import categorical_crossentropy from tensorflow.keras.models import Sequential from tensorflow.keras.layers i

我正在尝试使用RNN创建一个简单的文本名生成器。我很好地创建了模型,但当我尝试预测值时,我总是得到相同的字母

我的代码如下:

from tensorflow.keras.activations import softmax
from tensorflow.keras.losses import categorical_crossentropy
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

# parameters
LSTM_NODES = 100
MAX_NAME_LEN = 30
STOP_MARKER = '.'

# hyper-parameters
EPOCHS = 10

# read _names.train into an array
names = open('names.train', encoding='utf-8').read().strip().split('\n')

# precompute the number of samples
SAMPLES = 0
for name in names:
    for _ in name:
        SAMPLES = SAMPLES + 1

# get a sorted list of all unique characters used
corpus = sorted(list({l for name in names for l in name}))

# the first letter in the corpus must be the stop indicator
corpus.insert(0, STOP_MARKER)

# write out the corpus so that the predict script can use it
open('corpus.txt', 'w').write('\n'.join(corpus))

# calculate the input shape for the network
input_shape = (MAX_NAME_LEN, len(corpus))

# Creating a mapping from unique characters to indices
char2idx = {u:i for i, u in enumerate(corpus)}
idx2char = np.array(corpus)


def get_text(sample):
    t = ''
    for x in sample:
        n = idx2char[np.argmax(x)]
        t = t + n
    return t


# I need a 3-D array, samples x character position x character one-hot encoded
X = np.zeros((SAMPLES, MAX_NAME_LEN, len(corpus)), int)
Y = np.zeros((SAMPLES, len(corpus)), int)

# for each sample name
for name in names:
    # number of samples for this name is equal to the number of letters (we add one letter per loop)
    for i in range(len(name)):
        j = 0
        # create one sample
        while j <= i:
            one_hot_letter = np.zeros(len(corpus), int)
            one_hot_letter[char2idx[name[j]]] = 1
            X[i, j] = one_hot_letter
            j = j + 1
        # get the next character in the sequence
        one_hot_next = np.zeros(len(corpus), int)
        if j < len(name):
            one_hot_next[char2idx[name[j]]] = 1
        # add this character to the Y sample
        Y[i] = one_hot_next
        # print this sample
        print('X={} Y={}'.format(get_text(X[i]), idx2char[np.argmax(Y[i])]))

# build the model
model = Sequential()
model.add(LSTM(LSTM_NODES, input_shape=input_shape))
model.add(Dense(input_shape[1], activation=softmax))
model.compile(loss=categorical_crossentropy, optimizer='adam')
model.summary()

# train the model
model.fit(X, Y, epochs=EPOCHS)

# save the model
model.save('model.h5')

# try a sample prediction
# first letter is the seed
SEED = 'M'
name = SEED
x = np.zeros((1, input_shape[0], input_shape[1]), int)
one_hot_letter = np.zeros(len(corpus), int)
one_hot_letter[char2idx[SEED]] = 1
x[0, 0] = one_hot_letter
for i in range(1, MAX_NAME_LEN):
    predictions = model.predict(x)
    # get the next letter and add it to the prediction
    next_letter = np.zeros(input_shape[1], int)
    next_letter[np.argmax(predictions[0])] = 1
    x[0, i] = next_letter
    name = name + idx2char[np.argmax(next_letter)]
    print(name)
有什么想法吗?我想我的样品很好。我在其他人编写的另一个示例中使用了它们,它们产生了不同的结果。我有280个样品。以下是name.train的名称:

Adaldrida
Celendine
Gloriana
Pimpernel
Tanta
Alfrida
Cora
Goldilocks
Melba
培训的全部成果如下:

[snip]
X=Valde......................... Y=m
X=Valdem........................ Y=a
X=Valdema....................... Y=r
X=Valdemar...................... Y=.
2020-03-09 13:38:26.827190: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2020-03-09 13:38:26.843439: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x7fa8f211d590 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-03-09 13:38:26.843450: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm (LSTM)                  (None, 100)               58800     
_________________________________________________________________
dense (Dense)                (None, 46)                4646      
=================================================================
Total params: 63,446
Trainable params: 63,446
Non-trainable params: 0
_________________________________________________________________
Train on 1795 samples
Epoch 1/10
1795/1795 [==============================] - 2s 1ms/sample - loss: 0.0168
Epoch 2/10
1795/1795 [==============================] - 1s 462us/sample - loss: 0.0167
Epoch 3/10
1795/1795 [==============================] - 1s 445us/sample - loss: 0.0164
Epoch 4/10
1795/1795 [==============================] - 1s 450us/sample - loss: 0.0163
Epoch 5/10
1795/1795 [==============================] - 1s 449us/sample - loss: 0.0162
Epoch 6/10
1795/1795 [==============================] - 1s 453us/sample - loss: 0.0160
Epoch 7/10
1795/1795 [==============================] - 1s 593us/sample - loss: 0.0159
Epoch 8/10
1795/1795 [==============================] - 1s 599us/sample - loss: 0.0160
Epoch 9/10
1795/1795 [==============================] - 1s 442us/sample - loss: 0.0160
Epoch 10/10
1795/1795 [==============================] - 1s 440us/sample - loss: 0.0160
Mw
Mww
Mwww
Mwwww
Mwwwww
Mwwwwww
Mwwwwwww
Mwwwwwwww
Mwwwwwwwww
Mwwwwwwwwww
Mwwwwwwwwwww
[snip]```


我认为您的代码和培训方法没有问题,但是我认为您从不同的数据集得到的结果可能来自两个可能的原因

1您没有对模型进行足够好的培训,导致装配不足问题。我认为您的模型并没有过拟合,因为您的数据集似乎并不是只有“w”跟在“M”后面。也许我错了,你可以检查你的数据集和输出分布

2它来自char2idx和idx2char映射。由于您正试图从语料库本身的索引和字符创建映射词典,因此可能会导致每个语料库的不同映射。您可以通过为每个字符创建一个通用映射字典来解决此问题,并在每个数据集中使用它进行训练和预测,以保持映射一致性。您可以将映射字典保存为JSON文件。例如,在每次训练和预测中,字母“a”始终为[1,0,0,…],字母“a”始终为[0,1,0,0,…]。此外,由于您正在尝试进行角色库预测,因此需要使输出层的数量等于角色的数量,以便可以对所有可能的角色进行概率分布

小费


为了进行调试,您必须打印出概率分布,在本例中为预测变量,以便查看模型的分布,这样您就可以知道模型拟合不足或过拟合

我认为您的代码和培训方法没有问题,但是我认为您从不同的数据集得到的结果可能来自两个可能的原因

1您没有对模型进行足够好的培训,导致装配不足问题。我认为您的模型并没有过拟合,因为您的数据集似乎并不是只有“w”跟在“M”后面。也许我错了,你可以检查你的数据集和输出分布

2它来自char2idx和idx2char映射。由于您正试图从语料库本身的索引和字符创建映射词典,因此可能会导致每个语料库的不同映射。您可以通过为每个字符创建一个通用映射字典来解决此问题,并在每个数据集中使用它进行训练和预测,以保持映射一致性。您可以将映射字典保存为JSON文件。例如,在每次训练和预测中,字母“a”始终为[1,0,0,…],字母“a”始终为[0,1,0,0,…]。此外,由于您正在尝试进行角色库预测,因此需要使输出层的数量等于角色的数量,以便可以对所有可能的角色进行概率分布

小费


为了进行调试,您必须打印出概率分布,在本例中为预测变量,以便查看模型的分布,这样您就可以知道模型拟合不足或过拟合

所以我尝试了一个简单的代码实验,并将adam optimizer上的学习率降低到0.00001,结果如下:

Train on 1453 samples
Epoch 1/30

AEcOOOOONfffffwfwffwfpXWHfHHfA
BEEcOOOfffffwfwfwzffwfzffAdfWH
CEEccOOffffffwfwfwzfffpigMIwHH
FEcOOOOffffffwfwfwfzffwfWgCwHH
MEEcOOcffffffwfwfwfpXW.WggCIwH
PEEcOfffffffwfwfwzffwfzfzfAfAd

1453/1453 - 10s - loss: 0.0162
Epoch 2/30

AEEEcOcOOOOOffffwffwffpbWAHfHH
BEEEEccOOOfffffwffwffpbWAHfHHf
CEEEcEcOOOffffffwffwfpbWAHfHHf
FEEEccOOOOOfffffwffwffpbWAHfHH
MEEEcOOOOOOcOOONfffwfffFFooewG
PEEEcOOOOOOONcffffwffwffWpbAHH

1453/1453 - 4s - loss: 0.0162
Epoch 3/30

AEEEEcOOOOOcOOOOONcuuuullNulXy
BEEEEcOOOOOOOONcOOONEOEFFFFFFC
CEEEEcOOOOOOOONcOOONEOEFFFFFFC
FEEEEcOOOcOOOOOONcOOEOEOEFFFFF
MEEEEcOOOOOOOONcOOONEOEFFFFFFC
PEEEEcOOOOOOOONcOOONEOEFFFFFFC

1453/1453 - 4s - loss: 0.0162
Epoch 4/30

AEEEEOOOOOOOOONcOOONEOEFFFFFFF
BEEEEEcOOOOOOOOONcOOEOEOEFFFFF
CEEEEEcOOOOOOOOONcOOEOEOEFFFFF
FEEEEOOOOOOOcOOOONONcuuuulllXy
MEEEEOOOOOOOOONcOOONEOEFFFFFFF
PEEEEEcOOOOOOOOONcOOEOEOEFFFFF

1453/1453 - 4s - loss: 0.0162
Epoch 5/30

AEEEEOOOOOOOOOOONcOOEOEOEFFFFF
BEEEEEOOOOOOOOOONcOOEOEOEFFFFF
CEEEEEOOOOOOOOOONcOOEOEOEFFFFF
FEEEEOOOOOOOOOOONcOOEOEOEFFFFF
MEEEEOOOOOOOOOOONcOOEOEOEFFFFF
PEEEEEOOOOOOOOOONcOOEOEOEFFFFF

1453/1453 - 4s - loss: 0.0162
Epoch 6/30

AEEEEOOOOOOOOOOOONcOOEOEEFFFFF
BEEEEEOOOOOOOOOOONcOOEOEEFFFFF
CEEEEEOOOOOOOOOOOONcOEOEEFFFFF
FEEEEOOOOOOOOOOOONcOOEOEEFFFFF
MEEEEOOOOOOOOOOOONcOOEOEEFFFFF
PEEEEEOOOOOOOOOOOONcOEOEEFFFFF

...

Epoch 26/30

AOOOOOOOOOOOEOEOOEOEOEOEEEEEEE
BOOOOOOOOOOOOEOEOEOOEEOEEEEEEE
COOOOOOOOOOOOEOEOEOOEOEEEEEEEE
FOOOOOOOOOOOOOEOEOOEOEEOEEEEEE
MOOOOOOOOOOOOEOEOEOEOEOEEEEEEE
POOOOOOOOOOOOEOEOEOOEOEEEEEEEE

1453/1453 - 4s - loss: 0.0159
Epoch 27/30

AOEEEEEEEEEEEEEEOEOEOEOEEEEEEE
BOEEEEEEEEEEEEEEOEOEOOEEEEEEEE
COEEEEEEEEEEEEEEOEOOEOEEEEEEEE
FOOEEEEEEEEEEEEEOOEOEOEOEEEEEE
MOEEEEEEEEEEEEEEOEOEOEOEEEEEEE
POEEEEEEEEEEEEEEOEOOEOEEEEEEEE

1453/1453 - 4s - loss: 0.0155
Epoch 28/30

AEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
BEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
CEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
FEEEEEEEEEEEEEEEEEEEEEEEOEEEEE
MEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
PEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

1453/1453 - 4s - loss: 0.0165
Epoch 29/30

AEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
BEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
CEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
FEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
MEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
PEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

1453/1453 - 4s - loss: 0.0158
Epoch 30/30

AEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
BEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
CEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
FEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
MEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
PEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

1453/1453 - 4s - loss: 0.0159
正如你所见,最初,它并不总是生成相同的字母,但在第29纪元它生成相同的字母,这意味着你的学习率太高

但当然,还有一个问题,那就是它似乎没有学会不适,这一次你需要做更多的实验,我猜这更可能是因为你如何建模输入和输出,根据我的经验,如果我想做出下一个预测,我通常是这样建模的:

X -> Y
Adaldrida -> daldrida.
并使用return_sequences=True从每个时间步获得输出,而不是仅从上一个时间步获得输出,类似于本文所描述的。 与建模方式不同:

X -> Y
A -> d
Ad -> a
Ada -> l
etc.
使用这种输入-输出建模,我认为您会遇到一些问题,例如第一个字符后面的零太多,网络会忽略第一个字符,您可能想尝试使用预填充,因此尾随的零将在开始处,而不是结束处,或者您也可以尝试反转顺序


您的模型可能无法学习的另一个原因是,可能您应该尝试添加更多数据或调整最大名称长度。

因此我尝试了一个简单的代码实验,并将adam optimizer上的学习率降低到0.00001,结果如下:

Train on 1453 samples
Epoch 1/30

AEcOOOOONfffffwfwffwfpXWHfHHfA
BEEcOOOfffffwfwfwzffwfzffAdfWH
CEEccOOffffffwfwfwzfffpigMIwHH
FEcOOOOffffffwfwfwfzffwfWgCwHH
MEEcOOcffffffwfwfwfpXW.WggCIwH
PEEcOfffffffwfwfwzffwfzfzfAfAd

1453/1453 - 10s - loss: 0.0162
Epoch 2/30

AEEEcOcOOOOOffffwffwffpbWAHfHH
BEEEEccOOOfffffwffwffpbWAHfHHf
CEEEcEcOOOffffffwffwfpbWAHfHHf
FEEEccOOOOOfffffwffwffpbWAHfHH
MEEEcOOOOOOcOOONfffwfffFFooewG
PEEEcOOOOOOONcffffwffwffWpbAHH

1453/1453 - 4s - loss: 0.0162
Epoch 3/30

AEEEEcOOOOOcOOOOONcuuuullNulXy
BEEEEcOOOOOOOONcOOONEOEFFFFFFC
CEEEEcOOOOOOOONcOOONEOEFFFFFFC
FEEEEcOOOcOOOOOONcOOEOEOEFFFFF
MEEEEcOOOOOOOONcOOONEOEFFFFFFC
PEEEEcOOOOOOOONcOOONEOEFFFFFFC

1453/1453 - 4s - loss: 0.0162
Epoch 4/30

AEEEEOOOOOOOOONcOOONEOEFFFFFFF
BEEEEEcOOOOOOOOONcOOEOEOEFFFFF
CEEEEEcOOOOOOOOONcOOEOEOEFFFFF
FEEEEOOOOOOOcOOOONONcuuuulllXy
MEEEEOOOOOOOOONcOOONEOEFFFFFFF
PEEEEEcOOOOOOOOONcOOEOEOEFFFFF

1453/1453 - 4s - loss: 0.0162
Epoch 5/30

AEEEEOOOOOOOOOOONcOOEOEOEFFFFF
BEEEEEOOOOOOOOOONcOOEOEOEFFFFF
CEEEEEOOOOOOOOOONcOOEOEOEFFFFF
FEEEEOOOOOOOOOOONcOOEOEOEFFFFF
MEEEEOOOOOOOOOOONcOOEOEOEFFFFF
PEEEEEOOOOOOOOOONcOOEOEOEFFFFF

1453/1453 - 4s - loss: 0.0162
Epoch 6/30

AEEEEOOOOOOOOOOOONcOOEOEEFFFFF
BEEEEEOOOOOOOOOOONcOOEOEEFFFFF
CEEEEEOOOOOOOOOOOONcOEOEEFFFFF
FEEEEOOOOOOOOOOOONcOOEOEEFFFFF
MEEEEOOOOOOOOOOOONcOOEOEEFFFFF
PEEEEEOOOOOOOOOOOONcOEOEEFFFFF

...

Epoch 26/30

AOOOOOOOOOOOEOEOOEOEOEOEEEEEEE
BOOOOOOOOOOOOEOEOEOOEEOEEEEEEE
COOOOOOOOOOOOEOEOEOOEOEEEEEEEE
FOOOOOOOOOOOOOEOEOOEOEEOEEEEEE
MOOOOOOOOOOOOEOEOEOEOEOEEEEEEE
POOOOOOOOOOOOEOEOEOOEOEEEEEEEE

1453/1453 - 4s - loss: 0.0159
Epoch 27/30

AOEEEEEEEEEEEEEEOEOEOEOEEEEEEE
BOEEEEEEEEEEEEEEOEOEOOEEEEEEEE
COEEEEEEEEEEEEEEOEOOEOEEEEEEEE
FOOEEEEEEEEEEEEEOOEOEOEOEEEEEE
MOEEEEEEEEEEEEEEOEOEOEOEEEEEEE
POEEEEEEEEEEEEEEOEOOEOEEEEEEEE

1453/1453 - 4s - loss: 0.0155
Epoch 28/30

AEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
BEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
CEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
FEEEEEEEEEEEEEEEEEEEEEEEOEEEEE
MEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
PEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

1453/1453 - 4s - loss: 0.0165
Epoch 29/30

AEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
BEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
CEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
FEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
MEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
PEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

1453/1453 - 4s - loss: 0.0158
Epoch 30/30

AEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
BEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
CEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
FEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
MEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
PEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

1453/1453 - 4s - loss: 0.0159
正如你所见,最初,它并不总是生成相同的字母,但在第29纪元它生成相同的字母,这意味着你的学习率太高。

但当然,还有一个问题,那就是它似乎没有学会不适,这一次你需要做更多的实验,我猜这更可能是因为你如何建模输入和输出,根据我的经验,如果我想做出下一个预测,我通常是这样建模的:

X -> Y
Adaldrida -> daldrida.
并使用return_sequences=True从每个时间步获得输出,而不是仅从上一个时间步获得输出,类似于本文所描述的。 与建模方式不同:

X -> Y
A -> d
Ad -> a
Ada -> l
etc.
使用这种输入-输出建模,我认为您会遇到一些问题,例如第一个字符后面的零太多,网络会忽略第一个字符,您可能想尝试使用预填充,因此尾随的零将在开始处,而不是结束处,或者您也可以尝试反转顺序


您的模型可能无法学习的另一个原因是,可能您应该尝试添加更多数据或调整最大名称长度。

这一点以前已经问过并回答过

总而言之,这个问题被称为文本退化,与之前提出的问题链接到一个。引用作者的话:

为什么纯抽样产生的文本如此退化?在这项工作中,我们 表明不可靠的尾巴是罪魁祸首。这条不可靠的尾巴由数万个候选令牌组成,它们的概率相对较低,在聚合中被过度表示

他们发现,简单的采样可以导致循环或重复,因为生成模型将保持采样标记,这些标记形成了太可能的序列,即,重复没有新颖标记那么令人惊讶。将贪婪抽样的基线与显式截断不可靠尾部的方法进行比较:

图9

因此,首先,您应该在一个固定的令牌字典上输出一个logits概率向量

然后,选择一种比贪婪采样更复杂的解码策略。TensorFlow附带了and,但我建议从随机解码开始,您可以在下面的


这一点以前就有人问过,也有人回答过

总而言之,这个问题被称为文本退化,与之前提出的问题链接到一个。引用作者的话:

为什么纯抽样产生的文本如此退化?在这项工作中,我们 表明不可靠的尾巴是罪魁祸首。这条不可靠的尾巴由数万个候选令牌组成,它们的概率相对较低,在聚合中被过度表示

他们发现,简单的采样可以导致循环或重复,因为生成模型将保持采样标记,这些标记形成了太可能的序列,即,重复没有新颖标记那么令人惊讶。将贪婪抽样的基线与显式截断不可靠尾部的方法进行比较:

图9

因此,首先,您应该在一个固定的令牌字典上输出一个logits概率向量

然后,选择一种比贪婪采样更复杂的解码策略。TensorFlow附带了and,但我建议从随机解码开始,您可以在下面的


模型的输出是什么。拟合在训练过程中损失和精度会发生变化吗?是否使用np.0初始化权重?如果是,这不适用于梯度下降。在1795个样本上进行训练,历元5/10 1795/1795[===============================================================-1s 449us/样本-损失:0.0162历元6/10 1795/1795[========================================================================================================================================================================================================================第1个593个美国第1个美国第1个593个美国第1个美国第1个593个美国第1个美国第1个美国第1个美国第1个593个美国第1个美国第1个美国第1个美国第1个美国第1个美国第1个美国第1个593个美国第1个美国第0.0159个美国第8/10/10 1795/10 1795/1795/1795/1795/1795/1795/1795/1795 5年5 5 5 5 5年5 5 5 5年8/5年8/5 5月8/5 5 5 5 5 5 5 5 5 5 5 5 5月(第8/1795年5/5年5月第8/5/5 5 5月5 5 5 5 5 5 5 5 5 5 5 5 5月第0.15日第0.015第8/5第0 0.15日第8.015第8.0159第8/5第8/5第8.15日第1795年[======================================================]-1s 440us/样本-损失:0.0160如果您可以通过编辑帖子在此处显示输出,它可以帮助我们。不,我没有将权重初始化为零。您的模型的输出是什么。拟合在训练期间损失和精度是否会发生变化?您是否使用np.0初始化权重?如果是,这不适用于梯度下降。使用1795个样本进行训练5/10第1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795第0.0162/样本-损失:0.0162第1个美国/样本-样本-损失:样本-样品-损失:损失:0.0.0162第2个新纪元第6/10第6/10/10第6/10第6/10第6/10/1795/1795/1795/10/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795/1795第0 0 0 0 0 0 0.0 0 0 0 0.0162第0.5/0 0.0162第5/0.0162第6/5/5/5/5/5/5/=====================]-1s 599us/样本-损失:0.0160 Epoch 9/10 1795/1795[============================================================]-1s 442us/样本-损失:0.0160 Epoch 10/10 1795/1795[==================================-1s 440us/样本-损失:0.0160如果您可以通过编辑post在此处显示输出,它可以帮助我们。不,我不会将权重初始化为零。