我正在使用以下代码尝试并学习张量流。我已经明确指定了训练和验证X
和y
数组的形状。
import numpy as np
import tensorflow as tf
f = lambda x: 2*x
Xtrain = np.random.rand(400,1)
ytrain = f(Xtrain)
Xval = np.random.rand(200,1)
yval = f(Xval)
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(10, activation='relu'),
tf.keras.layers.Dense(10, activation='relu'),
tf.keras.layers.Dense(10, activation='relu'),
tf.keras.layers.Dense(10, activation='relu')
])
model.compile(optimizer='adam',
loss=tf.keras.losses.MeanSquaredError()
)
model.fit(Xtrain, ytrain, epochs=50, verbose=0)
运行yval.shape, model.predict(Xval).shape
时,我得到输出((200, 1), (200, 10))
。我无法理解这9个额外维度的来源。甚至Xval
预测也应具有(200, 1)
的形状。
答案 0 :(得分:2)
在Dense Layer
的最后Network
中需要进行一些小的修正。
由于您要预测Numeric Value
,并且由于问题是Regression
,因此最后一个致密层应该只有 1 Neuron/Unit
,并且 Activation Function
中的 Last Dense Layer
应该是 linear
。
因此,替换代码,
tf.keras.layers.Dense(10, activation='relu')
使用
tf.keras.layers.Dense(1, activation='linear')
应该解决您的问题。
完整的工作代码,其model.predict(Xval).shape
将为(200,1)
,如下所示:
import numpy as np
import tensorflow as tf
f = lambda x: 2*x
Xtrain = np.random.rand(400,1)
ytrain = f(Xtrain)
Xval = np.random.rand(200,1)
yval = f(Xval)
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(10, activation='relu'),
tf.keras.layers.Dense(10, activation='relu'),
tf.keras.layers.Dense(10, activation='relu'),
tf.keras.layers.Dense(1, activation='linear')
])
model.compile(optimizer='adam',
loss=tf.keras.losses.MeanSquaredError()
)
model.fit(Xtrain, ytrain, epochs=50, verbose=0)
如果问题是Units/Neurons
,并且每个输出代表classes
,则Last Dense Layer
中可以有多个Classification
(等于Probability
的数量)对应于每个Class
。