Forum Replies Created
- AuthorPosts
Olá Luis,
A biblioteca skorch que usamos para fazer validação cruzada no curso suporta o uso de GPUs, como é documentado aqui. Mesmo assim, é possível implementar a validação cruzada de forma mais manual, criando os folds explicitamente, e aproveitar o suporte a GPUs que o próprio PyTorch já tem.
31 de May de 2022 at 16:53 in reply to: Como converter um resultado do tensor em um percentual? #35071Com a função argmax:
array = output.numpy() prob = np.max(array) index = np.argmax(array) return prob, index
31 de May de 2022 at 12:00 in reply to: Como converter um resultado do tensor em um percentual? #35032array = output.numpy() array = np.max(array) return array
31 de May de 2022 at 11:30 in reply to: Como converter um resultado do tensor em um percentual? #35029Olá Aislan,
Este tensor já contém as probabilidades para cada uma das classes. Observe que o valor no index 6 é igual a 0.999, que equivale a 99.9%. Todos os outros são tão baixos que na prática equivalem a zero.
Se você quiser formatar melhor, pode converser este tensor para numpy array com
array = tensor.numpy()
, e depois extrair o valor máximo comnp.max(array)
.Olá Micael,
Para prever mais de uma categoria, além de ajustar o parâmetro NB_CLASSES, você precisa transformar seus rótulos usando o
LabelEncoder
do Sklearn:from sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() data_labels = encoder.fit_transform(data_labels.reshape(-1, 1))
Aliás, dá pra fazer isto também com duas categorias, ao invés de fazer a transformação manualmente como o professor fez.
O interessante de usar este método é que dá pra recuperar os rótulos originais no final, usando o método
inverse_transform
doencoder
:def get_prediction(sentence): tokens = encode_sentence(sentence) inputs = tf.expand_dims(tokens, 0) output = Dcnn(inputs, training=False).numpy() output = np.argmax(output, -1) category = encoder.inverse_transform(output) return category
Se você usar sigmoide, então cada neurônio que tiver valor o acima de 0.5 indica presença da categoria. Por exemplo, se neurônio_mamífero = 0.6, neurônio_aquático = 0.7 e neurônio_escamoso = 0.4, então o registro é mamífero e também aquático, mas não tem escamas.
Quando o problema só admite uma classe, nós usamos softmax, que aí sim o valor maior indica a presença da única classe permitida.
Até consegue, pois você pode por exemplo colocar três neurônios na camada de saída, todos ativados com sigmoide. Neste caso, a rede neural vai determinar se o registro pertence a cada uma das classes, independentemente. É assim que trabalhamos com problemas multi-classe, por exemplo quando um animal pode ser mamífero e aquático ao mesmo tempo. Mas se as classes forem exclusivas, por exemplo mamífero ou réptil ou peixe. a ativação mais adequada é softmax, que limita a resposta a somente uma categoria.
Até consegue, pois você pode por exemplo colocar três neurônios na camada de saída, todos ativados com sigmoide. Neste caso, a rede neural vai determinar se o registro pertence a cada uma das classes, independentemente. É assim que trabalhamos com problemas multi-classe, por exemplo quando um animal pode ser mamífero e aquático ao mesmo tempo. Mas se as classes forem exclusivas, por exemplo mamífero ou réptil ou peixe. a ativação mais adequada é softmax, que limita a resposta a somente uma categoria.
Olá Caio,
Cada neurônio de entrada representa uma variável do dataset, e cada neurônio terá pesos diferentes para cada camada oculta.
A função sigmoide produz resultados no intervalo entre 0 e 1, mas ela força para que os resultados se concentrem mais próximos de 0 ou de 1. Por isso, ela é uma função de ativação adequada para problemas de classificação binária, indicando uma das classes com 0 e a outra com 1.
Olá Felix,
Seria interessante converter a coluna
Date
para datetime se o professor fosse utilizar a data para, por exemplo, plotar um gráfico temporal, mas como ele não fez isso, não faz diferença, o importante é recuperar a informação de interesse.É que o displacy renderiza uma frase por vez, e tecnicamente, em uma coluna, você terá várias frases. Mas pode tentar algo deste tipo:
for frase in df['coluna']: doc = nlp(frase) displacy.render(doc, style='dep')
Depende, neste caso o 1 vai só significar se o registro não está nulo para a categoria “estado civil”. Se você quiser explicitar que a categoria pode ser casado, solteiro, viúvo ou nulo, precisa fazer desta forma:
reg1: casado => [1, 0, 0, 0] reg2: solteiro => [0, 1, 0, 0] reg3: viúvo => [0, 0, 1, 0] reg4: nulo => [0, 0, 0, 1]
Assim, cada posição da lista indica uma das 4 categorias possíveis para “estado civil”.
Esta codificação é tão comum que é chamada de One Hot Encoding, você vai encontrar referências a ela e como realizá-la no curso Machine Learning e Data Science com Python de A à Z, Parte 1 – Classificação, aula Atributos categóricos – OneHotEncoder.
Olá Caio,
As classes qualitativas devem estar representadas com
0
(para ausência) e1
(para presença), como acontece com várias colunas do dataset mostrado na aula.Olá Caio,
Você precisa garantir que as duas são amostras representativas da mesma população. Existe uma literatura considerável sobre o que significa uma amostra representativa, mas um dos princípios mais fundamentais é que ela seja aleatória. Não precisa ter o mesmo número de amostras, mas tecnicamente você precisa garantir que o número de amostras seja suficiente para medir o efeito de interesse. Este é outro assunto que tem bastante material de referência, te recomendo este artigo pra te dar uma ideia: https://www.statology.org/minimum-sample-size-for-t-test/
Olá Shin,
Tente adicionar o parâmetro
manual=True
à chamada do displacy, como sugere o código de erro.- AuthorPosts