Разное

Обучение vb net: Циклы в Visual Basic.NET

Циклы в Visual Basic.NET

Последнее обновление: 30.10.2015

Еще одним видом управляющих конструкций являются циклы. В VB.NET используется несколько видов циклов.

  • For…Next

  • For Each…Next

  • While

  • Do

Цикл For…Next

В этом цикл выполняется определенное число раз, причем это число задается счетчиком:


For i As Integer = 1 To 9
    Console.WriteLine("Квадрат числа {0} равен {1}", i, i * i)
Next

Здесь переменная i выполняет роль счетчика. После слова To мы помещаем максимальное значение счетчика. При каждом цикле значение счетчика увеличивается на единицу. И это значение сравнивается со значением после To. Если эти два значения равны, то цикла прекращает свою работу.

При работе с циклами мы можем увеличивать значение счетчика при каждом проходе не только на единицу, но и вообще на любое число. Для этого нужно либо использовать ключевое слово

Step и после него указать шаг цикла, на который будет увеличиваться значение счетчика, либо можно увеличивать счетчик непосредственно в цикле:


For i As Integer = 1 To -9 Step -1
    For j As Integer = 1 To 9
        Console. WriteLine("Произведение чисел i и j равно {0}", i * j)
        j += 1
    Next
Next

Обратите внимание, что в качестве шага в первом цикле выбрано отрицательное значение и значение счетчика с каждым проходом уменьшается на единицу. Во внутреннем цикле счетчик j при каждом проходе увеличивается на 2, так как он по умолчанию увеличивается на единицу, и еще мы явным образом увеличиваем его в цикле на единицу. В итоге внутренний цикл отрабатывает пять раз, а внешний девять, то есть фактически получается 45 циклов.

Цикл For Each…Next

Цикл For Each осуществляет перебор элементов в определенной группе, например, в массиве или в коллекции. Предположим у нас есть некоторый массив типа Integer и нам надо инициализировать этот массив случайными значениями и затем вывести все его элементы на экран:


'Создаем массив из пяти чисел
Dim nums(4) As Integer
Dim r As New Random()
'инициализируем массив
For i As Integer = 0 To nums. Length - 1
    nums(i) = r.Next(100)
Next
'Выводим элементы массива
For Each i As Integer In nums
    Console.Write("{0} ", i)
Next

В выражении For Each мы сначала указываем переменную, которая будет принимать значения элементов массива. А после ключевого слова In указываем группу, в которой надо перебрать все элементы.

Цикл While

В цикл While выполняется до тех пор, пока соблюдается определенное условие, указанное после слова While:


Dim j As Integer = 10
While j > 0
    Console.WriteLine(j)
    j -= 1
End While

Цикл Do

Цикл Do, также как и цикл While, выполняется, пока соблюдается определенное условие. Однако он имеет разные формы. Так, в следующем примере сначала проверяется условие, а затем выполняется блок кода, определенный в цикле:


Dim j As Integer = 10
Do While j > 0
    Console.WriteLine(j)
    j -= 1
Loop

В данном случае цикл выполняется, пока значение j больше нуля. Но есть еще одна запись, где вместо слова While используется слово Until, а цикл выполняется пока не соблюдено определенное условие, то есть пока значение j не станет меньше нуля:


Dim j As Integer = 10
Do Until j < 0
    Console.WriteLine(j)
    j -= 1
Loop

Если изначально условие, заданное в цикле, неверно, то цикл не будет работать. Но мы можем определить проверку в конце цикла, и таким образом, наш цикл как минимум один раз отработает:


Dim j As Integer = -1
Do
    Console.WriteLine(j)
     j -= 1
Loop Until j < 0
'либо
Do
    Console.WriteLine(j)
    j -= 1
Loop While j > 0		

Операторы Continue и Exit

Нередко возникает необходимость не дожидаться окончания цикла, а сразу же выйти из цикла, в случае соблюдения определенного условия. Для этого используют оператор Exit, после которого указывают тип цикла, из которого осуществляется выход, например, Exit Do (Exit While):


Dim r As New Random()
Dim num As Integer = r. Next(100)

For i As Integer = 0 To 100
    num -= 1
    If num < 50 Then Exit For
Next
Console.WriteLine(num)

Существует и другая задача — осуществить выход не из цикла, а из текущего прохода или итерации и перейти к следующему. Для этого используют оператор Continue, после которого указывают тип цикла, из которого осуществляется выход, например, Continue While:


Dim r As New Random()
Dim num As Integer = r.Next(100)

For i As Integer = 0 To 10
    num -= 7
    If num < 50 AndAlso num > 25 Then
        Continue For
    End If

    Console.WriteLine(num)
Next

В данном случае мы в каждом проходе цикла вычитаем из num число 7 и затем смотрим, не принадлежит ли число num интервалу от 25 до 50. И если принадлежит, переходим к новой итерации цикла, а если нет, то выводим его на экран.

НазадСодержаниеВперед

Машинное обучение с помощью технологии ML.

NET на VB.NET

Все примеры по машинному обучению с помощью Microsoft ML.NET даются на языке C#. Мы же напишем наше первое приложение по машинному обучению с помощью технологии ML.NET на языке Visual Basic .NET.

1

Что такое машинное обучениеи где его применяют

В самом общем виде машинное обучение – это решение таких задач с помощью компьютера, где трудно или невозможно написать обычный алгоритм для получения нужного результата. Например, задача определения образов на фото или видео даже для ребёнка будет элементарной. Однако чтобы «научить» компьютер распознавать условную кошку на фотографии, от программиста требуются огромные усилия. Допустим, программист может определить кошку как что-то полосатое и серое, с головой, 4-мя лапами и хвостом. Но под такое описание может попасть какое-то другое животное, а кошки других окрасов не попадут. Кроме того, а если на фотографии видно только три лапы и не видно хвоста? А если кошка находится в такой позе, что она вообще не похожа на кошку? И так далее, и тому подобное.

Как видно, количество возможных вариантов в подобного рода задачах может превышать все мыслимые пределы, и программист конечно же не сможет учесть все из них. Как раз для таких случаев и применяется машинное обучение. Это лишь один пример применения машинного обучения, однако их гораздо больше. Вот ещё несколько примеров:

  • распознавание речи;
  • распознавание текстов, в том числе рукописных;
  • распознавание лиц или иных объектов на фотографии или видеозаписи;
  • автоматический подбор настроек фото- или видеокамеры для наилучшего качества съёмки;
  • восстановление старинных фото- и видеозаписей;
  • автомобили и летательные аппараты без водителя или пилота;
  • прогнозирование стоимости ценной бумаги на бирже;

Применений для машинного обучения с каждым днём находится всё больше и больше. Причём множество задач алгоритмы решают гораздо лучше, чем человек. Например, ещё 5 лет назад проводились соревнования между компьютером и человеком в таких играх как шашки, шахматы и т.п. Сегодня компьютерное обучение достигло такого уровня, что ни один чемпион по шахматам не сможет выиграть у машины. Или другой пример. Если посадить человека перед камерой, где непрерывным потоком идёт толпа людей (например, система видеонаблюдения в метро), и дать ему задачу отыскать в толпе кого-то конкретного, то уже через 5 минут пристального всматривания в монитор у человека глаза полезут на лоб. А компьютер справится с этой задачей на ура.

По способу работы виды машинного обучения можно разделить так:

  • Обучение с учителем – это обучение на массиве объектов, когда программа точно знает, какие объекты она ищет и где они в обучающем массиве. Задачей этого вида обучение является нахождение закономерности, которой связан каждый рассматриваемый объект с искомым. Например, есть 1000 фотографий кошек, и программе при обучении точно сообщили, на каких фотографиях точно есть кошки.
  • Частичное обучение – при частичном обучении часть ответов неизвестна.
  • Обучение без учителя – программа ищет в массиве не объекты, а связи между объектами.
  • Обучение с подкреплением – программа пытается найти оптимальную стратегию, имея обратную связь.

Машинное обучение тесно связано с нейронными сетями. Точнее, нейронные сети – это один из видов машинного обучения.

Постоянно появляются новые виды машинного обучения, которые призваны улучшить уже существующие. Например, есть нейронные сети с обучением, в которых сама сеть генерирует обучающую выборку. Это решает проблему, если исходных данных для обучения слишком мало. Существуют состязательные сети, когда одна нейронная сеть решает какую-то свою задачу, а другая сеть пытается найти уязвимость в решении и таким образом первая сеть должна решать свою задачу всё лучше и лучше.

Нейронные сети и другие виды машинного обучения иногда называют искусственным интеллектом.

Однако надо понимать, что конечно же, это совсем не интеллект, а просто алгоритмы, хотя и весьма специфические, которые способны решать нетривиальные «умные» задачи.

Надо также помнить, что результат работы нейронной сети или других видов машинного обучения всегда даётся с какой-то вероятностью. То есть, если возвратиться к нашей исходной задаче поиска кошки на фото, то алгоритм машинного обучения найдёт кошек с какой-то вероятностью, не равной 100%. Это может быть 60, 80 или даже 95%, но никогда не 100%. Хотя зачастую 60%, полученные компьютером, могут быть лучше, чем способен выдать человек. Например, если ваш алгоритм ставит диагноз человеку по снимку внутренних органов, то наверное вероятность 60% будет недостаточна. А если задача – определить в темноте на расстоянии 1 км номер автомобиля на видео, то наверное 60% это даже много. Т.е. зависит от задачи, которую вы собираетесь решать с помощью машинного обучения, какая вероятность вас устроит.

Ещё одной особенностью машинного обучения можно считать то, что каждый алгоритм выполняет как правило одну (или несколько связанных) задач. Не существует универсальных алгоритмов, которые могут решать широкий круг задач. Это как раз присуще человеческому интеллекту, но не искусственному. Хотя, кто знает, возможно это ограничение вызвано недостатком вычислительной мощности современных компьютеров, и в недалёком будущем эта задача будет решена…

2

Предварительные действия для работы с машинным обучением на Visual Basic

Майкрософт, конечно же, не могла остаться в стороне от набирающей популярности темы, которая к тому же, очень многообещающая, и создала свой фреймворк для машинного обучения. Он называется ML.NET (от machine learning для .NET). Начать его изучать можно с данной статьи, а далее – с руководства по ML.NET.

Прежде чем использовать ML.NET (machine learning для платформы .NET), в системе должны быть установлены:

  • .NET Core;
  • пакет ML.NET;
  • Visual Studio 16.6.1 или более поздней версии.

Установку .NET Core мы уже вкратце обсужадали. В статье был описан алгоритм разработки программ на .NET Core, а также дана сслыка на скачивание SDK.

Скачать ML.NET, а заодно и изучить вводные материалы по данной технологии можно на сайте Микрософт.

Студию скачиваем, конечно же, также с официального сайта Microsoft.

Как только всё это будет установлено, мы готовы начать работу с машинным обучением на ML.NET.

3

Пример программы машинного обученияна VB.NET

Возьмём пример из блога компании Microsoft на Хабре, немного изменим и адаптируем его для VB.NET (а также исправим ошибку в приведённом C# коде). Скачаем файл с данными для обучения модели. Его нужно положить в директорию /bin проекта. Или можно поставить в свойствах файла через проводник по решению указать действие при компиляции – копировать в выходную директорию. Далее создадим проект консольного приложения .NET Core, переименуем файл Module1.vb в Program.vb (не обязательно) и напишем в нём следующий код:


Imports Microsoft.ML
Imports Microsoft. ML.Data
Imports Microsoft.ML.Transforms

Module Program

    'Шаг 1: Определите ваши структуры данных

    ''' <summary>
    ''' Используется для предоставления обучающих данных, а также как введение для предиктивных операций.
    ''' </summary>
    Public Class IrisData

        ''' <summary>
        ''' Первые 4 свойства - это входные данные / функции, используемые для прогнозирования метки label.
        ''' </summary>
        <LoadColumn(0)>
        Public SepalLength As Single

        <LoadColumn(1)>
        Public SepalWidth As Single

        <LoadColumn(2)>
        Public PetalLength As Single

        <LoadColumn(3)>
        Public PetalWidth As Single

        ''' <summary>
        ''' Label - это то, что вы предсказываете, и устанавливается только при обучении.
        ''' </summary>
        <LoadColumn(4)>
        Public Label As String
        
    End Class

    'Результат операции прогнозирования. 
    Public Class IrisPrediction

        <ColumnName("PredictedLabel")>
        Public PredictedLabels As String

    End Class


    Sub Main(args As String())
        
        ' Шаг 2: Создание среды ML.NET 
        Dim mlContext As New MLContext()

        Dim reader As TextLoader = mlContext.Data.CreateTextLoader(Of IrisData)(separatorChar:=",", hasHeader:=False)
        Dim trainingDataView As IDataView = reader.Load("iris.data")
        Console.WriteLine($"Данные из файла ""iris.data"" прочитаны.")

        ' Шаг 3: Преобразуйте свои данные и добавьте learner:

        ' Присвойте числовые значения тексту в столбце "label", потому что только числа могут быть обработаны во время обучения модели.
        ' Добавьте обучающий алгоритм в pipeline. 
        ' Преобразовать label обратно в исходный текст (после преобразования в число на шаге 3).
        Dim pipeline As EstimatorChain(Of KeyToValueMappingTransformer) = mlContext. Transforms.Conversion.MapValueToKey("Label") _
            .Append(mlContext.Transforms.Concatenate("Features", "SepalLength", "SepalWidth", "PetalLength", "PetalWidth")) _
            .Append(mlContext.MulticlassClassification.Trainers.SdcaNonCalibrated("Label", "Features")) _
            .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel"))

        ' Шаг 4: Обучите модель на этом наборе данных:
        
        Console.WriteLine("Начато обучение модели.")
        Dim model As TransformerChain(Of KeyToValueMappingTransformer) = pipeline.Fit(trainingDataView)
        Console.WriteLine("Обучение модели завершено.")

		' Шаг 5: Используйте модель для предсказания:
        Do
            Console.WriteLine()
            Dim id As New IrisData()
            Console.Write("Длина чашелистника (sepal length) = ") 
            id.SepalLength = CSng(Console.ReadLine())
            Console.Write("Ширина чашелистника (sepal width) = ") 
            id. SepalWidth = CSng(Console.ReadLine())
            Console.Write("Длина лепестка (petal length) = ") 
            id.PetalLength = CSng(Console.ReadLine())
            Console.Write("Ширина лепестка (petal width) = ") 
            id.PetalWidth = CSng(Console.ReadLine())
            Dim prediction As IrisPrediction = GetPrediction(mlContext, model, id)
            Console.WriteLine($"Предсказанный тип цветка: {prediction.PredictedLabels}")
        Loop
    End Sub

    Private Function GetPrediction(mlContext As MLContext, model As TransformerChain(Of KeyToValueMappingTransformer), data As IrisData) As IrisPrediction
        Dim prediction As IrisPrediction = mlContext.Model.CreatePredictionEngine(Of IrisData, IrisPrediction)(model).Predict(data)
        Return prediction
    End Function

End Module

Запустим нашу программу с машинным обучением. Если задавать разные значения длины и ширины чашелистника и лепестка ириса, то увидим примерно следующее:

Результат работы алгоритма машинного обучения на ML. NET и Visual Basic

Как видно, модель обучилась на тестовых данных, и теперь мы можем по данным о длине и ширине чашелистника и лепестка с определённой вероятностью предсказывать вид ириса.

учебных курсов по .Net и Visual Studio | Разработка программного обеспечения

Курсы Learning Tree по .NET и Visual Studio дают учащимся навыки создания веб-приложений с использованием ASP.NET Core и других технологий .NET, а также знакомят с передовым программированием на C# и передовыми методами работы с .NET. Студенты могут рассчитывать на получение опыта в таких областях, как MVC, Razor Pages, веб-службы и шаблоны проектирования, и в конечном итоге научиться создавать и развертывать современные многоплатформенные приложения.

59 курсов

Сортировать по популярностиСортировать по самой высокой ценеСортировать по самой низкой ценеСортировать по новым

Темам
Уровень курса

Фундамент Средний Передовой

Продолжительность

Меньше дня 1 день 2 дня 3 дня 4 дня 5 дней Многонедельный

Поставщик

АМС CertNexus ЕС-Совет IBM ISTQB Дерево обучения Открытая группа САП

Сертификаты

АПМГ-Интернэшнл АМС Большие данные ISTQB Джава питон ТОГАФ® Веб-разработка

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • CertNexus

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Открытая группа

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • Дерево обучения

  • ЕС-Совет

Онлайн-курсы обучения Visual Basic

  1. Все темы

Узнайте, как программировать на Visual Basic для приложений (VBA) и создавать приложения для Access, Excel и т.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *