Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Keras和TensorFlow找到数字的模式?_Python_Tensorflow_Keras_Cnn - Fatal编程技术网

Python 如何使用Keras和TensorFlow找到数字的模式?

Python 如何使用Keras和TensorFlow找到数字的模式?,python,tensorflow,keras,cnn,Python,Tensorflow,Keras,Cnn,我是tensorflow和卷积神经网络的新手,我想建立一个人工智能来学习寻找浮点数的模式。但是每当我试图运行代码时,我都会遇到一些错误。 以下是我目前的代码: import tensorflow as tf from tensorflow import keras from tensorflow.keras.layers import Dense train_data = [ [0.5, 0.2, 0.2], [0.3, 0.3, 0.4], [0.4, 0.4, 0.

我是tensorflow和卷积神经网络的新手,我想建立一个人工智能来学习寻找浮点数的模式。但是每当我试图运行代码时,我都会遇到一些错误。 以下是我目前的代码:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import Dense

train_data = [
    [0.5, 0.2, 0.2],
    [0.3, 0.3, 0.4],
    [0.4, 0.4, 0.5],
    [0.8, 0.8, 0.1]
    ]

train_labels = [
    2.0,
    3.0,
    4.0,
    8.0
    ]

test_data = [
    [0.2, 0.5, 0.2],
    [0.7, 0.1, 0.7],
    [0.6, 0.8, 0.8]
    ]

test_labels = [
    2,
    7,
    8
    ]

model = keras.Sequential()
model.add(Dense(4, activation=tf.nn.relu, input_shape=(1,)))
model.add(Dense(2, activation=tf.nn.relu))
model.add(Dense(1, activation=tf.nn.softmax))

model.compile(loss='sparse_categorical_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

model.summary()

EPOCHS = 2
BATCH_SIZE=1

model.fit(train_data, train_labels, epochs=EPOCHS, batch_size=BATCH_SIZE)
但是,当我尝试运行代码时,会出现以下错误:

Traceback (most recent call last):
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 511, in _apply_op_helper
    preferred_dtype=default_dtype)
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 1175, in internal_convert_to_tensor
    ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 977, in _TensorTensorConversionFunction
    (dtype.name, t.dtype.name, str(t)))
ValueError: Tensor conversion requested dtype int32 for Tensor with dtype float32: 'Tensor("metrics/acc/Cast_6:0", shape=(?, 1), dtype=float32)'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "testNeural.py", line 38, in <module>
    metrics=['accuracy'])
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\training\checkpointable\base.py", line 442, in _method_wrapper
    method(self, *args, **kwargs)
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py", line 499, in compile
    sample_weights=self.sample_weights)
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1844, in _handle_metrics
    return_stateful_result=return_stateful_result))
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1801, in _handle_per_output_metrics
    metric_result = _call_stateless_fn(metric_fn)
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1777, in _call_stateless_fn
    return weighted_metric_fn(y_true, y_pred, weights=weights, mask=mask)
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training_utils.py", line 647, in weighted
    score_array = fn(y_true, y_pred)
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\keras\metrics.py", line 1533, in binary_accuracy
    return K.mean(math_ops.equal(y_true, y_pred), axis=-1)
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\ops\gen_math_ops.py", line 3093, in equal
    "Equal", x=x, y=y, name=name)
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 547, in _apply_op_helper
    inferred_from[input_arg.type_attr]))
TypeError: Input 'y' of 'Equal' Op has type float32 that does not match type int32 of argument 'x'.
回溯(最近一次呼叫最后一次):
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\framework\op_def_library.py”,第511行,位于\u apply\u op_helper中
首选类型(默认类型)
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\framework\ops.py”,第1175行,内部\u convert\u-to\u tensor
ret=conversion\u func(值,dtype=dtype,name=name,as\u ref=as\u ref)
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\framework\ops.py”,第977行,在_tensortensortransitionfunction中
(dtype.name,t.dtype.name,str(t)))
ValueError:Tensor转换为dtype float32的Tensor请求了dtype int32:“Tensor(“metrics/acc/Cast_6:0”,shape=(?,1),dtype=float32)”
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“testNeural.py”,第38行,在
指标=[‘准确度’])
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\training\checkpointable\base.py”,第442行,在方法包装中
方法(self、*args、**kwargs)
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\keras\engine\training.py”,第499行,编译
样本重量=自身样本重量)
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\keras\engine\training.py”,第1844行,在(处理)度量中
return\u stateful\u result=return\u stateful\u result)
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\keras\engine\training.py”,第1801行,位于每个输出度量的句柄中
度量\u结果=\u调用\u无状态\u fn(度量\u fn)
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\keras\engine\training.py”,第1777行,位于调用无状态
返回加权度量fn(y_真,y_pred,权重=权重,掩码=掩码)
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\keras\engine\training\u utils.py”,第647行,格式为
分数数组=fn(y_真,y_pred)
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\keras\metrics.py”,第1533行,二进制
返回K.mean(数学运算相等(y_真,y_pred),轴=-1)
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\ops\gen\u math\u ops.py”,第3093行,等号
“相等”,x=x,y=y,name=name)
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\framework\op_def_library.py”,第547行,位于\u apply\u op_helper中
根据[输入参数类型属性]推断出的属性)
TypeError:“Equal”Op的输入“y”的类型float32与参数“x”的类型int32不匹配。

有人知道如何解决这个问题吗?

我有一些建议

  • 使用已知的数据类型,例如numpyfloat32,而不是python2d列表
  • 输入形状显然不是(1,)
  • 尝试为此任务使用回归+LSTM
  • 你有一个输出神经元,为什么是softmax
  • 稀疏分类准确度而非准确度

  • 问题是您正在尝试进行分类,因此应该为类使用整数值

    但是这种方法是错误的,因为你使用一个神经元来预测多个类,但也因为分类不能解决这个问题。相反,您应该尝试进行回归。当可能的类别数量有限时,应使用分类,而回归可用于根据所学的模式预测以前从未见过的值

    对于回归到任意值,使用None作为激活,使用mse作为损失


    对于0和1之间的值的回归,使用S形激活和mse或二进制交叉熵作为损失。

    这里的第4点是错误的,softmax可以处理交叉熵损失,这是正确的组合。我的意思是,你有1个输出神经元,为什么softmax?!是的,这是一个问题,但与选择损失无关。如果你说softmax在某种程度上与交叉熵损失不兼容,人们可能会被误导。那么更新是什么呢?您是否尝试实施任何答案,您的问题解决了吗?