Exemplo simples do TensorFlow

Apresento a sua atenção um exemplo simples de como trabalhar com um framework para trabalhar com Deep Learning – TensorFlow. Neste exemplo, ensinaremos uma rede neural a detectar números positivos, negativos e zero. Instalação do TensorFlow e CUDA Eu te instruo, esta tarefa realmente não é fácil)

Para resolver problemas de classificação, classificadores. TensorFlow tem vários classificadores de alto nível prontos que exigem configuração mínima para funcionar. Primeiro, treinaremos DNNClassifier usando conjunto de dados com números positivos, negativos e zero – com os “rótulos” corretos. No nível humano, um conjunto de dados é um conjunto de números com resultados de classificação (rótulos):

10 – positivo
-22– negativo
0 – zero
42 – positivo
… outros números com classificação

Em seguida, inicia-se o treinamento, após o qual você pode inserir números que nem foram incluídos no conjunto de dados – a rede neural deve identificá-los corretamente.
Abaixo está o código completo do classificador com gerador de conjunto de dados para treinamento e dados de entrada:

importar tensorflowimportar itertoolsimportar aleatóriode tempo tempo de importaçãoclass ClassifiedNumber:__número = 0__classifiedAs = 3def __init__(self, número):self.__number = númeroif número == 0:self.__classifiedAs = 0 # zeroelif número > 0:self.__classifiedAs = 1 # positivoelif número < 0:self.__classifiedAs = 2 # negativodef número(eu):return self.__númerodef classificadoAs(eu):return self.__classificadoAsdef classifiedAsString(classifiedAs):if classificadoAs == 0:return "Zero"elif classificadoAs == 1:return "Positivo"elif classificadoAs == 2:return "Negativo"def trainDatasetFunction():trainNumbers = []trainNumberLabels = []para i em intervalo(-1000, 1001):número = NúmeroClassificado(i)trainNumbers.append(number.number())trainNumberLabels.append(number.classifiedAs())return ( {"number" : trainNumbers } , trainNumberLabels)def inputDatasetFunction():global randomSeedrandom.seed(randomSeed) # para obter o mesmo resultadonúmeros = []para i em intervalo(0, 4):números.append(random.randint(-9999999, 9999999))return {"número" : números }def principal():print("Teste do classificador de números Positive-Negative-Zero do TensorFlow por demensdeum 2017 (demensdeum@gmail. com)")maximalClassesCount = len(definir< /span>(trainDatasetFunction()[1])) + 1numberFeature = tensorflow.feature_column. numeric_column("número")classificador = tensorflow.estimador. DNNClassifier(feature_columns = [numberFeature], unidades_ocultas = [10, 20, 10], n_classes = maximalClassesCount)gerador = classificador.train(input_fn = trainDatasetFunction, etapas = 1000).predict(input_fn =  inputDatasetFunction)inputDataset = inputDatasetFunction()resultados = lista(itertools. islice(generator, len(inputDatasetFunction()["número"])))i = 0para resultado em resultados:imprimir("número: %d classificado como %s" % (inputDataset["número"][i], classificadoAsString(result["class_ids"][0 ])))i += 1randomSeed = tempo()principal()

Tudo começa no método main(), definimos a coluna numérica com a qual o classificador irá funcionar – tensorflow.feature_column.numeric_column(“number”) Em seguida, os parâmetros do classificador são definidos. É inútil descrever os argumentos de inicialização atuais, pois a API muda todos os dias, e você definitivamente deve consultar a documentação da versão instalada do TensorFlow e não confiar em manuais desatualizados.

Em seguida, é lançado o treinamento indicando uma função que retorna um conjunto de dados de números de -1000 a 1000 (trainDatasetFunction), com a classificação correta desses números com base em positivo, negativo ou zero. A seguir, enviamos como entrada números que não estavam no conjunto de dados de treinamento – aleatório de -9999999 a 9999999 (inputDatasetFunction) para classificá-los.

Finalmente, lançamos iterações com base no número de dados de entrada (itertools.islice), imprimimos o resultado, executamos e ficamos surpresos:

número: 4063470 classificado como Positivonúmero: 6006715 classificado como Positivonúmero: -5367127 classificado como Negativonúmero: -7834276 classificado como Negativo

ESTÁ VIVO

Para ser honesto, ainda estou um pouco surpreso que o classificador *entenda* até mesmo aqueles números que eu não ensinei. Espero que no futuro eu entenda o tópico de aprendizado de máquina com mais detalhes e que haja mais tutoriais.

GitLab:
https://gitlab.com/demensdeum/MachineLearning

Links:
https://developers.googleblog.com/2017/09/introducing-tensorflow-datasets.html
https://www.tensorflow.org/versions/master/api_docs/python/tf/estimator/DNNClassifier