我得到了TypeError: Expected float32,但得到了型別為“str”的 auto。擬合序列模型時出錯。我檢查了我的輸入都是 numpy.ndarray。
type(xtrain),type(ytrain)
(numpy.ndarray, numpy.ndarray)
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape = (28,28)))
model.add(tf.keras.layers.Dense(32,activation='relu'))
model.add(tf.keras.layers.Dense(32,activation='relu'))
model.add(tf.keras.layers.Dense(10,activation=tf.keras.activations.softmax))
model.compile(loss = tf.keras.losses.SparseCategoricalCrossentropy,optimizer =
tf.keras.optimizers.Adam(learning_rate=.0001),metrics = ['accuracy'])
model.fit(x =xtrain,y = ytrain,epochs=100)
Epoch 1/100
TypeError Traceback(最近一次呼叫最后一次) in () ----> 1 model.fit(x =xtrain,y = ytrain,epochs=100)
1 幀 /usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py in autograph_handler(*args, **kwargs) 1127 除了例外為 e: # pylint:disable=broad-except 1128 if hasattr(e, "ag_error_metadata"): -> 1129 raise e.ag_error_metadata.to_exception(e) 1130 else: 1131 raise
型別錯誤:在用戶代碼中:
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 878, in train_function *
return step_function(self, iterator)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 867, in step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 860, in run_step **
outputs = model.train_step(data)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 810, in train_step
y, y_pred, sample_weight, regularization_losses=self.losses)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/compile_utils.py", line 201, in __call__
loss_value = loss_obj(y_t, y_p, sample_weight=sw)
File "/usr/local/lib/python3.7/dist-packages/keras/losses.py", line 141, in __call__
losses = call_fn(y_true, y_pred)
File "/usr/local/lib/python3.7/dist-packages/keras/losses.py", line 245, in call **
return ag_fn(y_true, y_pred, **self._fn_kwargs)
File "/usr/local/lib/python3.7/dist-packages/keras/losses.py", line 752, in __init__ **
from_logits=from_logits)
File "/usr/local/lib/python3.7/dist-packages/keras/losses.py", line 227, in __init__
super().__init__(reduction=reduction, name=name)
File "/usr/local/lib/python3.7/dist-packages/keras/losses.py", line 88, in __init__
losses_utils.ReductionV2.validate(reduction)
File "/usr/local/lib/python3.7/dist-packages/keras/utils/losses_utils.py", line 82, in validate
if key not in cls.all():
TypeError: Expected float32, but got auto of type 'str'.
uj5u.com熱心網友回復:
錯誤可能在代碼的這部分:
model.compile(loss = tf.keras.losses.SparseCategoricalCrossentropy,optimizer = tf.keras.optimizers.Adam(learning_rate=.0001),metrics = ['accuracy'])
嘗試將損失引數從 更改tf.keras.losses.SparseCategoricalCrossentropy為tf.keras.losses.SparseCategoricalCrossentropy()。
為清楚起見,兩者之間的區別在于,tf.keras.losses.SparseCategoricalCrossentropy你不是通過和類的實體,而tf.keras.losses.SparseCategoricalCrossentropy()你是。
uj5u.com熱心網友回復:
IIUC,你xtrain還是ytrain不是float你需要將它們轉換:
(使用復印件= FALSE轉換為in-place和不復制陣列,并且不使用更多的記憶體,并將其轉換):
xtrain = xtrain.astype('float32', copy=False)
ytrain = ytrain.astype('float32', copy=False)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/371402.html
