Простая однослойная нейронная сеть - PullRequest
2 голосов
/ 12 апреля 2020

Я пишу очень простую сеть:

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

training_data = np.array([[1, 1, 1], [2, 3, 1], [0, -1, 4], [0, 3, 0], [10, -6, 8], [-3, -12, 4]])
testing_data = np.array([6, 11, 1, 9, 10, -38])

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(units = 1, activation = tf.keras.activations.relu, input_shape = (3, )))
model.compile(optimizer = tf.keras.optimizers.RMSprop(0.001), loss = tf.keras.losses.mean_squared_error, metrics = tf.keras.metrics.mean_squared_error)
model.summary()
model.fit(training_data, testing_data, epochs = 1, verbose = 'False')
print("Traning completed.")
model.predict(np.array([1, 1, 1]))

Цель состоит в том, чтобы тренировать такие веса, как: aX + bY + cZ = (выход) Но я получаю ошибку

ValueError: вход 0 слоя sequential_54 несовместим со слоем: ожидаемая ось -1 входной фигуры будет иметь значение 3, но получила входной сигнал с формой [None, 1]

Я не могу сделать сцену из измерений, я что-то не так делаю! Любая помощь?

1 Ответ

1 голос
/ 12 апреля 2020

В Keras, когда вы указываете, что размер пакета входной формы игнорируется, пожалуйста, обратитесь здесь для более подробной информации. Ваша декларация input_shape = (3, ) верна, но когда вы делаете вывод, вам также необходимо учитывать размер пакета, добавляя дополнительное измерение для того же самого, поэтому вместо np.array([1, 1, 1]) вам нужно иметь np.array([[1, 1, 1]]).

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

training_data = np.array([[1, 1, 1], [2, 3, 1], [0, -1, 4], [0, 3, 0], [10, -6, 8], [-3, -12, 4]])
testing_data = np.array([6, 11, 1, 9, 10, -38])

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(units = 1, activation = tf.keras.activations.relu, input_shape = (3,)))
model.compile(optimizer = tf.keras.optimizers.RMSprop(0.001), loss = tf.keras.losses.mean_squared_error, metrics = [tf.keras.metrics.mean_squared_error])
model.summary()

model.fit(training_data, testing_data, epochs = 1, verbose = 'False')
print("Traning completed.")
model.predict(np.array([[1, 2, 1]]))

array([[0.08026636]], dtype=float32)

Надеюсь, это поможет!

...