Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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
Tensorflow 如何克服错误的维度问题_Tensorflow_Tensorflow2.0_Tensorflow Datasets - Fatal编程技术网

Tensorflow 如何克服错误的维度问题

Tensorflow 如何克服错误的维度问题,tensorflow,tensorflow2.0,tensorflow-datasets,Tensorflow,Tensorflow2.0,Tensorflow Datasets,我在做“Iris数据集上的模型验证”的作业 我得到了这个错误:“检查输入时出错:预期密集_输入具有形状(135),但得到了具有形状(4,)的数组”。我如何克服这个问题 我的代码是 from numpy.random import seed seed(8) import tensorflow as tf import numpy as np import matplotlib.pyplot as plt from sklearn import datasets, model_selection

我在做“Iris数据集上的模型验证”的作业

我得到了这个错误:“检查输入时出错:预期密集_输入具有形状(135),但得到了具有形状(4,)的数组”。我如何克服这个问题

我的代码是

from numpy.random import seed
seed(8)
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets, model_selection 
from sklearn.model_selection import train_test_split
%matplotlib inline
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D



def read_in_and_split_data(iris_data):

data=iris_data["data"] 

targets=iris_data["target"] 

train_data, test_data, train_targets, test_targets= train_test_split(data,targets,test_size=0.1)

return(train_data, test_data, train_targets, test_targets)



iris_data = datasets.load_iris()
train_data, test_data, train_targets, test_targets = read_in_and_split_data(iris_data)


train_targets = tf.keras.utils.to_categorical(np.array(train_targets))
test_targets = tf.keras.utils.to_categorical(np.array(test_targets))


def get_model(input_shape):

model= Sequential ([
    
    Dense(64, kernel_initializer='he_uniform',bias_initializer='ones', input_shape=(train_data.shape[0],)),
    Dense(128, activation= "relu"),
    Dense(128, activation= "relu"),
    Dense(128, activation= "relu"),
    Dense(128, activation= "relu"),
    Dense(64, activation= "relu"),
    Dense(64, activation= "relu"),
    Dense(64, activation= "relu"),
    Dense(64, activation= "relu"),
    Dense(3, activation= 'softmax')
    

])

return model



model = get_model(train_data[0].shape)


def compile_model(model):
opt= tf.keras.optimizers.Adam(learning_rate=0.0001)
acc= tf.keras.metrics.SparseCategoricalAccuracy()
mae= tf.keras.metrics.MeanAbsoluteError()

model.compile(optimizer='adam',
          loss='categorical_crossentropy',
          metrics=['accuracy'])

compile_model(model)



def train_model(model, train_data, train_targets, epochs):

return model.fit(train_data, train_targets, epochs=epochs, validation_split= 0.15, batch_size=40)
在我装上这个电池之前一切都很好

history = train_model(model, train_data, train_targets, epochs=800)
这时错误框弹出

 ValueError                                Traceback (most recent call last)
 <ipython-input-20-96db4320a1b9> in <module>
  1 # Run your function to train the model
  2 
  ----> 3 history = train_model(model, train_data, train_targets, epochs=800)

 <ipython-input-19-ce18af880dd7> in train_model(model, train_data, train_targets, epochs)
 11     """
 12 
 ---> 13     return model.fit(train_data, train_targets, epochs=epochs, validation_split= 0.15, 
 batch_size=40)
 14 
 15 

  /opt/conda/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py in fit(self, 
  x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, 
  class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, 
  max_queue_size, workers, use_multiprocessing, **kwargs)
  726         max_queue_size=max_queue_size,
  727         workers=workers,
  --> 728         use_multiprocessing=use_multiprocessing)
  729 
  730   def evaluate(self,

  /opt/conda/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_v2.py in 
  fit(self, model, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, 
  shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, 
  validation_freq, **kwargs)
  222           validation_data=validation_data,
  223           validation_steps=validation_steps,
  --> 224           distribution_strategy=strategy)
  225 
  226       total_samples = _get_total_number_of_samples(training_data_adapter)

  /opt/conda/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_v2.py in _ 
  process_training_inputs(model, x, y, batch_size, epochs, sample_weights, class_weights, 
  steps_per_epoch, validation_split, validation_data, validation_steps, shuffle, 
  distribution_strategy, max_queue_size, workers, use_multiprocessing)
  514         batch_size=batch_size,
  515         check_steps=False,
  --> 516         steps=steps_per_epoch)
  517     (x, y, sample_weights,
  518      val_x, val_y,

  /opt/conda/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py in _ 
  standardize_user_data(self, x, y, sample_weight, class_weight, batch_size, check_steps, steps_name, 
  steps, validation_split, shuffle, extract_tensors_from_dataset)
  2470           feed_input_shapes,
  2471           check_batch_axis=False,  # Don't enforce the batch size.
  -> 2472           exception_prefix='input')
  2473 
  2474     # Get typespecs for the input data and sanitize it if necessary.

  /opt/conda/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_utils.py in 
  standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
  572                              ': expected ' + names[i] + ' to have shape ' +
  573                              str(shape) + ' but got array with shape ' +
  --> 574                              str(data_shape))
  575   return data
  576 

  ValueError: Error when checking input: expected dense_input to have shape (135,) but got array with 
  shape (4,)
ValueError回溯(最近一次调用)
在里面
1#运行您的函数来训练模型
2.
---->3历史=列车模型(模型、列车数据、列车目标、历次=800)
列车内模型(模型、列车数据、列车目标、年代)
11     """
12
--->13返回模型拟合(序列数据,序列目标,历元=历元,验证分割=0.15,
批次(单位尺寸=40)
14
15
/opt/conda/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py in fit(self,
x、 y、批量大小、年代、详细信息、回调、验证拆分、验证数据、洗牌、,
类别权重、样本权重、初始历元、每历元步长、验证步长、验证频率、,
最大队列大小,工人,使用多处理,**kwargs)
726最大队列大小=最大队列大小,
727名工人=工人,
-->728使用多处理=使用多处理)
729
730 def评估(自我,
/opt/conda/lib/python3.7/site-packages/tensorflow\u core/python/keras/engine/training\u v2.py in
拟合(自我、模型、x、y、批量大小、年代、详细、回调、验证拆分、验证数据、,
洗牌、等级权重、样本权重、初始历元、每历元步骤、验证步骤、,
验证频率,**kwargs)
222验证数据=验证数据,
223验证步骤=验证步骤,
-->224分销(策略=策略)
225
226总样本数=\u获取\u总样本数\u(训练\u数据\u适配器)
/opt/conda/lib/python3.7/site-packages/tensorflow\u core/python/keras/engine/training\u v2.py in\u
过程训练输入(模型、x、y、批量、年代、样本权重、类别权重、,
每个历元的步骤、验证分割、验证数据、验证步骤、洗牌、,
分布策略、最大队列大小、工人、使用(多处理)
514批次大小=批次大小,
515检查步骤=错误,
-->516步=每一个历元的步数)
517(x,y,样本重量,
518瓦卢x,瓦卢y,
/opt/conda/lib/python3.7/site-packages/tensorflow\u core/python/keras/engine/training.py in\u
标准化用户数据(自身、x、y、样本重量、类别重量、批次大小、检查步骤、步骤名称、,
步骤、验证(拆分、洗牌、从数据集中提取张量)
2470个进纸输入形状,
2471检查_batch_axis=False,#不强制执行批大小。
->2472异常(前缀为“输入”)
2473
2474#获取输入数据的类型规范,必要时对其进行清理。
/opt/conda/lib/python3.7/site-packages/tensorflow\u core/python/keras/engine/training\u utils.py in
标准化输入数据(数据、名称、形状、检查批处理轴、异常前缀)
572':预期“+名称[i]+”具有形状”+
573 str(shape)+“但是得到了具有shape的数组”+
-->574 str(数据形状))
575返回数据
576
ValueError:检查输入时出错:预期密集_输入具有形状(135,),但获得具有
形状(4,)

请原谅我询问此消息。我还是一个新手,tensorflow 2.0对我来说是全新的。我在这里和那里都会犯错误。但我在此祝大家圣诞快乐。

错误表明您的输入数据形状与模型的输入形状不兼容。您需要检查您的train\u数据形状:

 print(train_data.shape)
查看该形状是否与模型输入的形状兼容。我猜您没有调用函数read\u in\u和\u split\u data,而train\u数据来自另一个单元格