Skip to content

Commit ed18bbe

Browse files
authored
Merge pull request #765 from dotnet/master
Update live with current master
2 parents b50590e + fe3df22 commit ed18bbe

File tree

59 files changed

+686
-726
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+686
-726
lines changed

.github/CODEOWNERS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,5 @@
2727
/snippets/csharp/** @BillWagner
2828
# Visual Basic snippets:
2929
/snippets/visualbasic/** @rpetrusha
30+
# F# Snippets:
31+
/snippets/fsharp/** @cartermp

machine-learning/tutorials/TransferLearningTF/Program.cs

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ class Program
1818
// <SnippetDeclareGlobalVariables>
1919
static readonly string _assetsPath = Path.Combine(Environment.CurrentDirectory, "assets");
2020
static readonly string _trainTagsTsv = Path.Combine(_assetsPath, "inputs-train", "data", "tags.tsv");
21-
static readonly string _predictTagsTsv = Path.Combine(_assetsPath, "inputs-predict", "data", "tags.tsv");
21+
static readonly string _predictImageListTsv = Path.Combine(_assetsPath, "inputs-predict", "data", "image_list.tsv");
2222
static readonly string _trainImagesFolder = Path.Combine(_assetsPath, "inputs-train", "data");
2323
static readonly string _predictImagesFolder = Path.Combine(_assetsPath, "inputs-predict", "data");
24+
static readonly string _predictSingleImage = Path.Combine(_assetsPath, "inputs-predict-single", "data", "toaster3.jpg");
2425
static readonly string _inceptionPb = Path.Combine(_assetsPath, "inputs-train", "inception", "tensorflow_inception_graph.pb");
2526
static readonly string _inputImageClassifierZip = Path.Combine(_assetsPath, "inputs-predict", "imageClassifier.zip");
2627
static readonly string _outputImageClassifierZip = Path.Combine(_assetsPath, "outputs", "imageClassifier.zip");
@@ -41,8 +42,12 @@ static void Main(string[] args)
4142
// </CallSnippetReuseAndTuneInceptionModel>
4243

4344
// <SnippetCallClassifyImages>
44-
ClassifyImages(mlContext, _predictTagsTsv, _predictImagesFolder, _outputImageClassifierZip);
45+
ClassifyImages(mlContext, _predictImageListTsv, _predictImagesFolder, _outputImageClassifierZip);
4546
// </SnippetCallClassifyImages>
47+
48+
// <SnippetCallClassifySingleImage>
49+
ClassifySingleImage(mlContext, _predictSingleImage, _outputImageClassifierZip);
50+
// </SnippetCallClassifySingleImage>
4651
}
4752

4853
// <SnippetInceptionSettings>
@@ -60,14 +65,8 @@ private struct InceptionSettings
6065
public static void ReuseAndTuneInceptionModel(MLContext mlContext, string dataLocation, string imagesFolder, string inputModelLocation, string outputModelLocation)
6166
{
6267

63-
Console.WriteLine("Read model");
64-
Console.WriteLine($"Model location: {inputModelLocation}");
65-
Console.WriteLine($"Images folder: {_trainImagesFolder}");
66-
Console.WriteLine($"Training file: {dataLocation}");
67-
Console.WriteLine($"Default parameters: image size=({InceptionSettings.ImageWidth},{InceptionSettings.ImageHeight}), image mean: {InceptionSettings.Mean}");
68-
6968
// <SnippetLoadData>
70-
var data = mlContext.Data.ReadFromTextFile<ImageData>(path: dataLocation, hasHeader: true);
69+
var data = mlContext.Data.ReadFromTextFile<ImageData>(path: dataLocation, hasHeader: false);
7170
// </SnippetLoadData>
7271

7372
// <SnippetMapValueToKey1>
@@ -144,15 +143,14 @@ public static void ClassifyImages(MLContext mlContext, string dataLocation, stri
144143
{
145144
Console.WriteLine($"=============== Loading model ===============");
146145
Console.WriteLine($"Model loaded: {outputModelLocation}");
147-
148146
// Load the model
149147
// <SnippetLoadModel>
150148
ITransformer loadedModel;
151149
using (var fileStream = new FileStream(outputModelLocation, FileMode.Open))
152150
loadedModel = mlContext.Model.Load(fileStream);
153151
// </SnippetLoadModel>
154152

155-
// Read the tags.tsv file and add the filepath to the image file name
153+
// Read the image_list.tsv file and add the filepath to the image file name
156154
// before loading into ImageData
157155
// <SnippetReadFromTSV>
158156
var imageData = ReadFromTsv(dataLocation, imagesFolder);
@@ -171,6 +169,38 @@ public static void ClassifyImages(MLContext mlContext, string dataLocation, stri
171169

172170
}
173171

172+
public static void ClassifySingleImage(MLContext mlContext, string imagePath, string outputModelLocation)
173+
{
174+
Console.WriteLine($"=============== Loading model ===============");
175+
Console.WriteLine($"Model loaded: {outputModelLocation}");
176+
// Load the model
177+
// <SnippetLoadModel2>
178+
ITransformer loadedModel;
179+
using (var fileStream = new FileStream(outputModelLocation, FileMode.Open))
180+
loadedModel = mlContext.Model.Load(fileStream);
181+
// </SnippetLoadModel2>
182+
183+
// load the fully qualified image file name into ImageData
184+
// <SnippetLoadImageData>
185+
var imageData = new ImageData()
186+
{
187+
ImagePath = imagePath
188+
};
189+
// </SnippetReadFromTSV2>
190+
191+
// <SnippetPredictSingle>
192+
// Make prediction function (input = ImageNetData, output = ImageNetPrediction)
193+
var predictor = loadedModel.CreatePredictionEngine<ImageData, ImagePrediction>(mlContext);
194+
var prediction = predictor.Predict(imageData);
195+
// </SnippetPredictSingle>
196+
197+
Console.WriteLine("=============== Making single image classification ===============");
198+
// <SnippetDisplayPrediction>
199+
Console.WriteLine($"Image: {Path.GetFileName(imageData.ImagePath)} predicted as: {prediction.PredictedLabelValue} with score: {prediction.Score.Max()} ");
200+
// </SnippetDisplayPrediction>
201+
202+
}
203+
174204
private static void PairAndDisplayResults(IEnumerable<ImageData> imageNetData, IEnumerable<ImagePrediction> imageNetPredictionData)
175205
{
176206
// Builds pairs of (image, prediction) to sync up for display
@@ -196,8 +226,7 @@ public static IEnumerable<ImageData> ReadFromTsv(string file, string folder)
196226
.Select(line => line.Split('\t'))
197227
.Select(line => new ImageData()
198228
{
199-
ImagePath = Path.Combine(folder, line[0]),
200-
Label = line[1],
229+
ImagePath = Path.Combine(folder, line[0])
201230
});
202231
// </SnippetReadFromTsv>
203232
}

machine-learning/tutorials/TransferLearningTF/TransferLearningTF.csproj

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,16 @@
1919
<None Update="assets\inputs-predict\data\pizza3.jpg">
2020
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2121
</None>
22-
<None Update="assets\inputs-predict\data\tags.tsv">
22+
<None Update="assets\inputs-predict\data\Rogalik.jpg">
23+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
24+
</None>
25+
<None Update="assets\inputs-predict\data\image_list.tsv">
2326
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2427
</None>
2528
<None Update="assets\inputs-predict\data\teddy6.jpg">
2629
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2730
</None>
28-
<None Update="assets\inputs-predict\data\toaster3.jpg">
31+
<None Update="assets\inputs-predict-single\data\toaster3.jpg">
2932
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
3033
</None>
3134
<None Update="assets\inputs-predict\imageClassifier.zip">
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
MichalPL, [Ok Toaster](https://commons.wikimedia.org/wiki/File:OK._Toaster.jpg) [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.en)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
broccoli.png
2+
pizza3.jpg
3+
teddy6.jpg

machine-learning/tutorials/TransferLearningTF/assets/inputs-predict/data/tags.tsv

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
MichalPL, [Ok Toaster](https://commons.wikimedia.org/wiki/File:OK._Toaster.jpg) [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.en)
21
Agnieszka Kwiecień, [Spinach pizza](https://commons.wikimedia.org/wiki/File:Spinach_pizza.jpg), [GNU Free Documentation License v1.2 or later](https://en.wikipedia.org/wiki/en:GNU_Free_Documentation_License) and [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/legalcode)
32
David Monniaux, [Broccoli DSC00862](https://commons.wikimedia.org/wiki/File:Broccoli_DSC00862.png), [GNU Free Documentation License v1.2 or later](https://en.wikipedia.org/wiki/en:GNU_Free_Documentation_License) and [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/legalcode)
4-
Earlgray.Ler2ra, [My teddy bear](https://commons.wikimedia.org/wiki/File:My_teddy_bear.jpg), [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.en)
3+
Earlgray.Ler2ra, [My teddy bear](https://commons.wikimedia.org/wiki/File:My_teddy_bear.jpg), [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.en)
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
broccoli.jpg broccoli
2-
pizza.jpg pizza
3-
pizza2.jpg pizza
4-
teddy2.jpg teddy
5-
teddy3.jpg teddy
6-
teddy4.jpg teddy
7-
toaster.jpg toaster
8-
toaster2.png toaster
1+
broccoli.jpg food
2+
pizza.jpg food
3+
pizza2.jpg food
4+
teddy2.jpg toy
5+
teddy3.jpg toy
6+
teddy4.jpg toy
7+
toaster.jpg appliance
8+
toaster2.png appliance

snippets/cpp/VS_Snippets_Remoting/Classic SoapExtension.ChainStream Example/CPP/source.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public ref class TraceExtension: public SoapExtension
8080
return String::Format( "C:\\{0}.log", WebServiceType->FullName );
8181
}
8282

83-
// Recieve the filename stored by GetInitializer and store it in a member variable
83+
// Receive the filename stored by GetInitializer and store it in a member variable
8484
// for this specific instance.
8585
virtual void Initialize( Object^ initializer ) override
8686
{

0 commit comments

Comments
 (0)