TensorFlow .js Простая модель для прогнозирования 2 Таблица множественная не показывает правильный вывод? - PullRequest
0 голосов
/ 09 апреля 2019

Я создал модель tenorflow.js для прогнозирования выходных данных, кратных двум, например, 16 должен прогнозировать 32 таким же образом, и учитывая, что входные данные и метка, соответственно, по-прежнему выводятся, на которых напечатано [[1],] после Forextion.print ()

Код: -

const data = tf.tensor([2,4,6,8,10,12,14,16,18,20,22,24,26,28,30])
const label = tf.tensor([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])

const model = tf.sequential()
model.add(tf.layers.dense({inputShape : [1], units : 32, activation : 'relu'}))
model.add(tf.layers.dense({ units : 1, activation : 'softmax'}))   

model.compile({
    optimizer:'sgd',
    loss:'meanSquaredError',
    metrics:['accuracy']
})
function onBatchEnd (batch,logs){
   // console.log(logs.acc)
}
model.fit(data,label,{
epochs: 50,
batchSize : 4,
callbacks:{onBatchEnd}
}).then(info =>{
    console.log(info.history.acc);
    const prediction = model.predict(tf.tensor([16]))
    prediction.print() 
})

Вывод по Prediction.print () равен [[1],]

и, пожалуйста, объясните значение формы ввода здесь, как определить, какую форму ввода дать, например, если у меня есть тензор = [[1,2], [3,4], [5,6]] Итак, что будет входной формой для этого, и, пожалуйста, дайте ссылку на изучение функции активации, такой как relu и softmax, и должна ли единица выходного слоя быть одной (1), только если я даю что-то, кроме той, что дает ошибку? (Объяснение Не ясно)

1 Ответ

0 голосов
/ 09 апреля 2019

Функция активации для последнего слоя не может быть softmax.softmax используется при выполнении задачи классификации.Это не тот случай.

На официальном сайте tenorflow есть множество примеров.Глядя на ваши данные и метку, кажется, что вы перевернули их.Если вы хотите предсказать 32 из 16, 32 - это функция (данные в вашем случае), а 32 - метка. Здесь - это ссылка, чтобы понять разницу между объектами и метками.

Если вы хотите предсказать из 2 значений, то inputShape будет иметь Shape [2].Проще говоря, InputShape - это форма единственного элемента, который вы хотели бы предсказать.Если вы хотите предсказать из:

  • [1, 2], inputShape будет 2
  • [[2, 4, 5], [5, 6, 3]], inputShape будет [2, 3]

и т. Д. *

модель с inputShape [1]

const data = tf.tensor([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])
const label = tf.tensor([2,4,6,8,10,12,14,16,18,20,22,24,26,28,30])

const model = tf.sequential()
model.add(tf.layers.dense({inputShape : [1], units : 32, activation : 'relu'}))
model.add(tf.layers.dense({ units : 1}))   

model.compile({
    optimizer:'sgd',
    loss:'meanSquaredError',
    metrics:['accuracy']
})
function onBatchEnd (batch,logs){
   // console.log(logs.acc)
}
model.fit(data, label, {
epochs: 50,
callbacks:{onBatchEnd}
}).then(info =>{
    console.log(info.history.acc);
    const prediction = model.predict(tf.tensor([16]))
    prediction.print() 
})
<html>
  <head>
    <!-- Load TensorFlow.js -->
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.14.1"> </script>
  </head>

  <body>
  </body>
</html>

модель с inputShape [2]

const data = tf.tensor([[1,2],[3,4],[5,6],[7,8],[9,10],[11,12],[13,14]])

const label = tf.tensor([[2,4],[6,8],[10,12],[14,16],[18,20],[22,24],[26,28]])

const model = tf.sequential()
model.add(tf.layers.dense({inputShape : [2], units : 32, activation : 'relu'}))
model.add(tf.layers.dense({ units : 2}))   

model.compile({
    optimizer: tf.train.sgd(0.001),
    loss:'meanSquaredError',
    metrics:['accuracy']
})
function onBatchEnd (batch,logs){
   // console.log(logs.acc)
}
model.fit(data, label, {
epochs: 50,
callbacks:{onBatchEnd}
}).then(info =>{
    console.log(info.history.acc);
    const prediction = model.predict(tf.tensor([[12, 13]]))
    prediction.print() 
})
<html>
  <head>
    <!-- Load TensorFlow.js -->
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest"> </script>
  </head>

  <body>
  </body>
</html>
...