我应该如何为sparse_categorical_crossentropy损失函数设置数据?

时间:2019-02-16 17:10:33

标签: python machine-learning keras

最近两天我真的很努力寻找问题所在。我是机器学习的新手,并且正在尝试使用keras构建一个使用sparse_c._c的非常简单的神经网络。因为一个热编码矩阵将是巨大的,实际上我的标签达到了非常随机的值,最高可达1000;但我得到一个错误,说sparse_c._c。不接受超出[0,1)范围的值,这很奇怪,因为我从文档和大量文章中看到,此损失函数可以接受任何整数。 我输入的数据有误吗?有没有更简单的方法可以使神经网络正常工作?

dataset=numpy.genfromtxt("data.csv", delimiter=",")
labelset=numpy.genfromtxt("labels.csv", delimiter=",")
print(dataset.shape)
print(labelset.shape)
vn=dataset.shape[1]-2

X=dataset[:, 0:vn]
Y=labelset[:, 0:1]



train_data, test_data, train_labels, test_labels = train_test_split(X, Y, test_size=.3, random_state=5)


train_labels = numpy.squeeze(numpy.asarray(train_labels))
test_labels = numpy.squeeze(numpy.asarray(test_labels))

model=Sequential()
model.add(Dense(vn, input_dim=vn, activation='relu'))
model.add(Dense(1, kernel_initializer='normal', activation='relu'))


model.compile(loss="sparse_categorical_crossentropy", optimizer="adam", metrics=['sparse_categorical_accuracy'])
model.fit(train_data, train_labels, epochs=100, batch_size=50, validation_data=(test_data, test_labels))    

scores=model.evaluate(test_data, test_labels, verbose=0)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

##Dataset example: [[4, 5, 6, 7],
##                   5, 23, 6, 2],
##                   2, 456, 7, 5]]
##Labels example: [1, 1, 4]

我得到的错误要点:接收到的标签值4超出有效范围[0,1)。标签值:1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

1 个答案:

答案 0 :(得分:0)

在丢失的情况下稀疏意味着如果类索引与标签向量索引匹配,则您有一个非零的向量(在本例中为1)。因此,您必须提供stdClass而不是'' Secuencia para guardar el nuevo 5 por que como nuevo archivo y preservar la plantilla original Dim workbook_Name As Variant workbook_Name = Application.GetSaveAsFilename(InitialFileName:="D:\Carpoto\AbInbev\Elaboracion y servicios") & "xlsm" If workbook_Name <> False Then ActiveWorkbook.SaveAs fileName:=workbook_Name End If Dim nuevopq As String nuevopq = ActiveWorkbook.Name ' THIS SEQUENCE, OPEN THE CONSOLIDATE WORKBOOK Dim directory As String, fileName As String, sheet As Worksheet Application.ScreenUpdating = False directory = "D:\Carpoto\AbInbev\" fileName = Dir(directory & "Consolidado 5pq Planta 2019.xlsx") Workbooks.Open (directory & fileName) Windows("Consolidado 5pq Planta 2019.xlsx").Activate ' FIND THE NEXT EMPTY ROW TO COPY DATA HERE Cells(Rows.Count, 1).End(xlUp).Select ActiveCell.Offset(1, 0).Select Dim CellRange As String CellRange = ActiveCell.Address(False, False) Dim consol As String Dim wbkCur As Workbook Dim wbkNew As Workbook Set wbkCur = Workbooks("Consolidado 5pq Planta 2019.xlsx") Set wbkNew = Workbooks(nuevopq) 'HERE I GET THE ERROR, WHEN I WANT TO COPY THE VALUE FROM D8 TO THE EMPTY CELL IN THE CONSOLIDATE WORKBOOK wbkCur.Range(CellRange).Value = webkNew.Range("D8").Value (假设总共有4个课程)。

您可以使用它来转换标签:

[0 0 0 1]