TensorFlow.JS에서 아야메의 분류를 학습시켜 보았다(초보의 초보/그 2)
2, TensorFlow.JS에서 아야메의 분류를 학습
클래식한 얼음 분류의 학습을 작성해 보겠습니다. 이것은 흰개미 꽃잎의 너비, 길이 뾰족한 너비, 길이의 4가지 수치 및 쐐기의 종류(setosa, versicolor, virginica)의 정보를 바탕으로 각 수치에서 쏘기 종류의 확률을 예측하는 것입니다 . 그 학습 수법에 대해서는 다수의 쪽이 각 URL에 기재하고 있으므로 특별히 설명은 하지 않습니다만, 그 대부분이 학습이 깨끗하게 수렴하는 확립된 학습 모델을 사용하고 있습니다. 여기에서는, 학습이 수렴하는 「통상판」과 스스로 학습 모델을 구축하는 「학습 모델 검토용」의 2 종류의 프로그램을 작성했습니다.
실제 동작은 여기(아야메의 분류의 학습/통상판) 또는 여기(아야메로 분류의 학습/학습 모델 검토용)을 클릭하십시오.
2-1, 아야메의 분류를 학습(통상판)
순서로서는, 전회의 기사 「TensorFlow.JS를 사용해 보았다(초보의 초보/그 1)」와 거의 같고 다음과 같습니다.
(1) 학습 모델을 작성한다.
선인들의 학습 모델을 참고로 1층분의 중간층을 가지는 다음의 그림과 같은 모델을 작성합니다.
TensorFlow.JS용 학습 모델 작성let model = tf.sequential();
model.add(tf.layers.dense({
inputShape: [ 4 ],
activation: "sigmoid",
units: 10
}));
model.add(tf.layers.dense({
activation: "softmax",
units: 3
}));
(2) 학습용 입력 데이터와 교사 데이터를 준비한다.
아이야메 분류용의 학습 데이터는, 「Iris flower data set」로서 인터넷상의 각처에 있습니다만, 이번은 다음의 URL로부터 CSV 파일을 다운로드했습니다.
"htps : // st. 기주 b. 이 m/네 tj/8836201"
입력 데이터로서, 흰개미의 꽃잎의 폭, 길이 뾰족한 너비, 길이의 4개의 수치의 배열(xTrainData)을 교사 데이터로서 3개의 쐐기의 종류(setosa, versicolor, virginica)에 대응한 배열(yTrainData) 준비하고 각각에 필요한 수의 데이터를 저장했습니다. 검증용 데이터에 대해서도 마찬가지입니다.
(3) 작성한 데이터를 TensorFlow.JS 용으로 변환한다.
학습용 데이터(xTrainData, yTrainData)와 검증용 데이터(xTestData, yTestData)를 각각 TensorFlow.JS용 데이터로 변환합니다.
TensorFlow.JS용 데이터로 변환 const xTrain = tf.tensor2d( xTrainData, [ xTrainData.length, 4 ], 'float32' );
const yTrain = tf.tensor2d( yTrainData, [ yTrainData.length, 3 ], 'int32' );
const xTest = tf.tensor2d( xTestData, [ xTestData.length, 4 ], 'float32' );
const yTest = tf.tensor2d( yTestData, [ yTestData.length, 3 ], 'int32' );
(4) 학습 실행
작성한 학습 데이터 (xTrain, yTrain)를 사용하여 학습하고 검증 데이터로서 xTest와 yTest를 지정하고 있습니다. 덧붙여서 callbacks의 내용은, 도중 경과의 표시입니다.
학습 수행// 学習過程の設定
model.compile({
loss: "categoricalCrossentropy",
optimizer: tf.train.adam(optimize),
metrics: ['accuracy']
});
// 学習と学習経過をdspに格納
const history = await model.fit( xTrain, yTrain, {
epochs: epochData,
validationData:[ xTest, yTest ],
callbacks: {
onEpochEnd: async (epoch, logs) => {
if(((epoch + 1) % (epochData/5)) == 0) {
dsp = dsp + (" " + (Train_count + epoch)).slice(-7) + " : " + (logs.loss + "000000000000").slice(0,12) + " / " + (logs.acc + "000000000000").slice(0,12) + " / " + (logs.val_loss + "000000000000").slice(0,12) + " / " + (logs.val_acc + "000000000000").slice(0,12) + "\n";
document.getElementById("dump").value = dsp;
}
},
}
});
(5) 평가용 데이터를 TensorFlow.JS용으로 변환한다.
평가용으로 입력한 흰개미의 꽃잎의 폭, 길이 뾰족한 폭, 길이의 4개의 수치(d_0, d_1, d_2, d_3)를 TensorFlow.JS용으로 변환합니다.
TensorFlow.JS용 데이터로 변환 const inputData = tf.tensor2d( [ d_0, d_1, d_2, d_3 ], [ 1, 4 ], 'float32' );
(6) 평가 실행
여기서 results에 아야메의 종류(setosa, versicolor, virginica)에 대응한 평가 결과가 배열로서 저장됩니다.
TensorFlow.JS용 데이터로 변환 const outputData = model.predict(inputData);
var results = outputData.dataSync();
실제 동작은 여기(아야메의 분류의 학습/통상판)을 클릭하십시오.
2-2, 아야메의 분류를 학습(학습 모델 검토용)
다음에 스스로 학습 모델을 구축하는 프로그램을 작성했습니다. 기본적인 순서는 상기와 같습니다만, 학습 모델은 중간층 2층까지 지정할 수 있도록 했습니다. 각 레이어의 단위 수와 활성화 함수를 지정하여 학습 모델을 지정할 수 있습니다.
학습 모델 구축 if(Dense == 2) { // 中間層2層の場合
model.add(tf.layers.dense({units: UN_1, activation: Act_01, inputShape: [4]}));
model.add(tf.layers.dense({units: UN_2, activation: Act_02}));
model.add(tf.layers.dense({units: 3, activation: Act_00}));
} else if(Dense == 1) { // 中間層1層の場合
model.add(tf.layers.dense({units: UN_1, activation: Act_01, inputShape: [4]}));
model.add(tf.layers.dense({units: 3, activation: Act_00}));
} else { // 中間層なしの場合
model.add(tf.layers.dense({units: 3, activation: Act_00, inputShape: [4]}));
}
다양한 조합으로 학습 모델을 구축하고, 학습의 진행 상태를 확인해 보세요. 중간층 없이도 나름대로 학습하는 것 같습니다.
실제 동작은 여기(아야메로 분류의 학습/학습 모델 검토용)을 클릭하십시오.
TensorFlow.JS를 사용해 본 기사 내용
1, TensorFlow.JS에서 간단한 함수를 배워 보았습니다.
2, TensorFlow.JS에서 아야메의 분류를 학습시켜 보았다
3, TensorFlow.JS에서 수동 입력 숫자 인식을 학습했습니다.
4, TensorFlow.JS에서 이미지 인식 (분류)을 배웠습니다.
여기에 기재된 HTML/JavaScript의 동작을 확인하고 싶은 분은 "http://hal322.html.xdomain.jp/" 를 참조해 주세요.
Reference
이 문제에 관하여(TensorFlow.JS에서 아야메의 분류를 학습시켜 보았다(초보의 초보/그 2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/halboujp/items/e224f0ff0cb5b9784d95
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
let model = tf.sequential();
model.add(tf.layers.dense({
inputShape: [ 4 ],
activation: "sigmoid",
units: 10
}));
model.add(tf.layers.dense({
activation: "softmax",
units: 3
}));
const xTrain = tf.tensor2d( xTrainData, [ xTrainData.length, 4 ], 'float32' );
const yTrain = tf.tensor2d( yTrainData, [ yTrainData.length, 3 ], 'int32' );
const xTest = tf.tensor2d( xTestData, [ xTestData.length, 4 ], 'float32' );
const yTest = tf.tensor2d( yTestData, [ yTestData.length, 3 ], 'int32' );
// 学習過程の設定
model.compile({
loss: "categoricalCrossentropy",
optimizer: tf.train.adam(optimize),
metrics: ['accuracy']
});
// 学習と学習経過をdspに格納
const history = await model.fit( xTrain, yTrain, {
epochs: epochData,
validationData:[ xTest, yTest ],
callbacks: {
onEpochEnd: async (epoch, logs) => {
if(((epoch + 1) % (epochData/5)) == 0) {
dsp = dsp + (" " + (Train_count + epoch)).slice(-7) + " : " + (logs.loss + "000000000000").slice(0,12) + " / " + (logs.acc + "000000000000").slice(0,12) + " / " + (logs.val_loss + "000000000000").slice(0,12) + " / " + (logs.val_acc + "000000000000").slice(0,12) + "\n";
document.getElementById("dump").value = dsp;
}
},
}
});
const inputData = tf.tensor2d( [ d_0, d_1, d_2, d_3 ], [ 1, 4 ], 'float32' );
const outputData = model.predict(inputData);
var results = outputData.dataSync();
if(Dense == 2) { // 中間層2層の場合
model.add(tf.layers.dense({units: UN_1, activation: Act_01, inputShape: [4]}));
model.add(tf.layers.dense({units: UN_2, activation: Act_02}));
model.add(tf.layers.dense({units: 3, activation: Act_00}));
} else if(Dense == 1) { // 中間層1層の場合
model.add(tf.layers.dense({units: UN_1, activation: Act_01, inputShape: [4]}));
model.add(tf.layers.dense({units: 3, activation: Act_00}));
} else { // 中間層なしの場合
model.add(tf.layers.dense({units: 3, activation: Act_00, inputShape: [4]}));
}
Reference
이 문제에 관하여(TensorFlow.JS에서 아야메의 분류를 학습시켜 보았다(초보의 초보/그 2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/halboujp/items/e224f0ff0cb5b9784d95텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)