我们成功地基于五个气候特征和一个二进制标签(0或1)训练了一个TensorFlow模型。我们希望为五个新的气候变量值的外部输入生成一个输出,这些值将被输入到model.predict()中。然而,当我们尝试输入一个包含五个值的数组时,遇到了错误。提前感谢!
def split_dataset(dataset, test_ratio=0.10): """Splits a panda dataframe in two.""" test_indices = np.random.rand(len(dataset)) < test_ratio return dataset[~test_indices], dataset[test_indices]train_ds_pd, test_ds_pd = split_dataset(dataset_df)print("{} examples in training, {} examples for testing.".format( len(train_ds_pd), len(test_ds_pd)))label = "Presence"train_ds = tfdf.keras.pd_dataframe_to_tf_dataset(train_ds_pd, label=label)test_ds = tfdf.keras.pd_dataframe_to_tf_dataset(test_ds_pd, label=label)model_1 = tfdf.keras.RandomForestModel()model_1.compile( metrics=["accuracy"])with sys_pipes(): model_1.fit(x=train_ds)evaluation = model_1.evaluate(test_ds, return_dict=True)print()for name, value in evaluation.items(): print(f"{name}: {value:.4f}")model_1.save("tfmodelmosquito")import numpy as npmodel_1=tf.keras.models.load_model ("tfmodelmosquito")import pandas as pdprediction = model_1.predict([9.0, 10.0, 11.0, 12.0, 13.0])print (prediction)
错误:
---------------------------------------------------------------------------ValueError Traceback (most recent call last)<ipython-input-67-be5f2b7bc739> in <module>() 3 import pandas as pd 4 ----> 5 prediction = model.predict([[9.0,10.0,11.0,12.0,13.0]]) 6 print (prediction)9 frames/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs) 984 except Exception as e: # pylint:disable=broad-except 985 if hasattr(e, "ag_error_metadata"):--> 986 raise e.ag_error_metadata.to_exception(e) 987 else: 988 raiseValueError: in user code: /usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:1569 predict_function * return step_function(self, iterator) /usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:1559 step_function ** outputs = model.distribute_strategy.run(run_step, args=(data,)) /usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:1285 run return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs) /usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:2833 call_for_each_replica return self._call_for_each_replica(fn, args, kwargs) /usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:3608 _call_for_each_replica return fn(*args, **kwargs) /usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:1552 run_step ** outputs = model.predict_step(data) /usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:1525 predict_step return self(x, training=False) /usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/base_layer.py:1030 __call__ outputs = call_fn(inputs, *args, **kwargs) /usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/saving/saved_model/utils.py:69 return_outputs_and_add_losses outputs, losses = fn(*args, **kwargs) /usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/saving/saved_model/utils.py:167 wrap_with_training_arg lambda: replace_training_and_call(False)) /usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/utils/control_flow_util.py:110 smart_cond pred, true_fn=true_fn, false_fn=false_fn, name=name) /usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/smart_cond.py:56 smart_cond return false_fn() /usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/saving/saved_model/utils.py:167 <lambda> lambda: replace_training_and_call(False)) /usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/saving/saved_model/utils.py:163 replace_training_and_call return wrapped_call(*args, **kwargs) /usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/def_function.py:889 __call__ result = self._call(*args, **kwds) /usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/def_function.py:933 _call self._initialize(args, kwds, add_initializers_to=initializers) /usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/def_function.py:764 _initialize *args, **kwds)) /usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/function.py:3050 _get_concrete_function_internal_garbage_collected graph_function, _ = self._maybe_define_function(args, kwargs) /usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/function.py:3444 _maybe_define_function graph_function = self._create_graph_function(args, kwargs) /usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/function.py:3289 _create_graph_function capture_by_value=self._capture_by_value), /usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py:999 func_graph_from_py_func func_outputs = python_func(*func_args, **func_kwargs) /usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/def_function.py:672 wrapped_fn out = weak_wrapped_fn().__wrapped__(*args, **kwds) /usr/local/lib/python3.7/dist-packages/tensorflow/python/saved_model/function_deserialization.py:291 restored_function_body "\n\n".join(signature_descriptions))) ValueError: Could not find matching function to call loaded from the SavedModel. Got: Positional arguments (2 total): * Tensor("inputs:0", shape=(None, 5), dtype=float32) * False Keyword arguments: {} Expected these arguments to match one of the following 4 option(s): Option 1: Positional arguments (2 total): * {'Humidity': TensorSpec(shape=(None, 1), dtype=tf.float32, name='inputs/Humidity'), 'Cloud_Cover': TensorSpec(shape=(None, 1), dtype=tf.float32, name='inputs/Cloud_Cover'), 'Temperature': TensorSpec(shape=(None, 1), dtype=tf.float32, name='inputs/Temperature'), 'Pressure': TensorSpec(shape=(None, 1), dtype=tf.float32, name='inputs/Pressure'), 'Precipitation': TensorSpec(shape=(None, 1), dtype=tf.float32, name='inputs/Precipitation')} * False Keyword arguments: {} Option 2: Positional arguments (2 total): * {'Temperature': TensorSpec(shape=(None, 1), dtype=tf.float32, name='inputs/Temperature'), 'Precipitation': TensorSpec(shape=(None, 1), dtype=tf.float32, name='inputs/Precipitation'), 'Cloud_Cover': TensorSpec(shape=(None, 1), dtype=tf.float32, name='inputs/Cloud_Cover'), 'Humidity': TensorSpec(shape=(None, 1), dtype=tf.float32, name='inputs/Humidity'), 'Pressure': TensorSpec(shape=(None, 1), dtype=tf.float32, name='inputs/Pressure')} * True Keyword arguments: {} Option 3: Positional arguments (2 total): * {'Cloud_Cover': TensorSpec(shape=(None, 1), dtype=tf.float32, name='Cloud_Cover'), 'Humidity': TensorSpec(shape=(None, 1), dtype=tf.float32, name='Humidity'), 'Precipitation': TensorSpec(shape=(None, 1), dtype=tf.float32, name='Precipitation'), 'Temperature': TensorSpec(shape=(None, 1), dtype=tf.float32, name='Temperature'), 'Pressure': TensorSpec(shape=(None, 1), dtype=tf.float32, name='Pressure')} * False Keyword arguments: {} Option 4: Positional arguments (2 total): * {'Temperature': TensorSpec(shape=(None, 1), dtype=tf.float32, name='Temperature'), 'Precipitation': TensorSpec(shape=(None, 1), dtype=tf.float32, name='Precipitation'), 'Humidity': TensorSpec(shape=(None, 1), dtype=tf.float32, name='Humidity'), 'Cloud_Cover': TensorSpec(shape=(None, 1), dtype=tf.float32, name='Cloud_Cover'), 'Pressure': TensorSpec(shape=(None, 1), dtype=tf.float32, name='Pressure')} * True Keyword arguments: {}
回答:
假设a是一个样本输入数组。将其转换为pandas数据框,然后转换为TF数据集。这种方法对我有效。
a = [17, 88, 1000, 0.47, 95]df=pd.DataFrame (columns=["Temperature", "Humidity", "Pressure", "Precipitation", "Cloud Cover"])df.loc[len(df)] = adf_ds=tfdf.keras.pd_dataframe_to_tf_dataset(df)model_1=tf.keras.models.load_model("tfmodelmosquito")prediction = model_1.predict(df_ds)print (prediction)