2017-11-23 13 views
0

私はCSVファイルのデータを使用してニューラルネットワークを訓練しようとしています。これは、CSVからデータを取り出し、リストに格納し、このリストを配列に変換し、xとyの値として2つの配列を使用してニューラルネットワークを訓練します。エラー:テンソルフローを使用しているときに閉じたファイルに対する入出力操作

import numpy as np 
 
import tensorflow as tf 
 
import csv 
 
from collections import defaultdict 
 

 

 
columns = defaultdict(list) # each value in each column is appended to a list 
 

 
            
 
    # Declare list of features, we only have one real-valued feature 
 
def model_fn(features, labels, mode): 
 
    with open('C:\\Users\\joe\\Documents\\EURUSD learn.txt') as f: 
 
     reader = csv.DictReader(f) # read rows into a dictionary format 
 
    for row in reader: # read a row as {column1: value1, column2: value2,...} 
 
     for (k,v) in row.items(): # go over each column name and value 
 
      columns[k].append(v) # append the value into the appropriate list 
 
           # based on column name k 
 
    openarray = np.asarray('<OPEN>') 
 
    closearray = np.asarray('<CLOSE>') 
 
    higharray = np.asarray('<HIGH>') 
 
    lowarray = np.asarray('<LOW>') 
 
    # Build a linear model and predict values 
 
    W = tf.get_variable("W", [1], dtype=tf.float64) 
 
    b = tf.get_variable("b", [1], dtype=tf.float64) 
 
    y = W*features['x'] + b 
 
    # Loss sub-graph 
 
    loss = tf.reduce_sum(tf.square(y - labels)) 
 
    # Training sub-graph 
 
    global_step = tf.train.get_global_step() 
 
    optimizer = tf.train.GradientDescentOptimizer(0.01) 
 
    train = tf.group(optimizer.minimize(loss), 
 
       tf.assign_add(global_step, 1)) 
 
    # EstimatorSpec connects subgraphs we built to the 
 
    # appropriate functionality. 
 
    return tf.estimator.EstimatorSpec(
 
     mode=mode, 
 
     predictions=y, 
 
     loss=loss, 
 
     train_op=train) 
 

 
with open('C:\\Users\\joe\\Documents\\EURUSD learn.txt') as f: 
 
    estimator = tf.estimator.Estimator(model_fn=model_fn) 
 
    # define our data sets 
 
    x_train = np.array(['openarray']) 
 
    y_train = np.array(['closearray']) 
 
    x_eval = np.array(['higharray']) 
 
    y_eval = np.array(['lowarray']) 
 
    input_fn = tf.estimator.inputs.numpy_input_fn(
 
    {"x": x_train}, y_train, batch_size=4, num_epochs=None, shuffle=True) 
 
    train_input_fn = tf.estimator.inputs.numpy_input_fn(
 
    {"x": x_train}, y_train, batch_size=4, num_epochs=1000, shuffle=False) 
 
    eval_input_fn = tf.estimator.inputs.numpy_input_fn(
 
    {"x": x_eval}, y_eval, batch_size=4, num_epochs=1000, shuffle=False) 
 
    # train 
 
    estimator.train(input_fn=input_fn, steps=1000) 
 
    # Here we evaluate how well our model did. 
 
    train_metrics = estimator.evaluate(input_fn=train_input_fn) 
 
    eval_metrics = estimator.evaluate(input_fn=eval_input_fn) 
 
    print("train metrics: %r"% train_metrics) 
 
    print("eval metrics: %r"% eval_metrics)

私は、コードを実行すると、私は次のエラーを取得:

WARNING:tensorflow:Using temporary folder as model directory: C:\Users\joe\AppData\Local\Temp\tmp3yj2dh4d 
 
Traceback (most recent call last): 
 
    File "C:\Users\joe\AppData\Local\Programs\Python\Python35\stocks closing+opening.py", line 54, in <module> 
 
    estimator.train(input_fn=input_fn, steps=1000) 
 
    File "C:\Users\joe\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\estimator\estimator.py", line 302, in train 
 
    loss = self._train_model(input_fn, hooks, saving_listeners) 
 
    File "C:\Users\joe\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\estimator\estimator.py", line 711, in _train_model 
 
    features, labels, model_fn_lib.ModeKeys.TRAIN, self.config) 
 
    File "C:\Users\joe\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\estimator\estimator.py", line 694, in _call_model_fn 
 
    model_fn_results = self._model_fn(features=features, **kwargs) 
 
    File "C:\Users\joe\AppData\Local\Programs\Python\Python35\stocks closing+opening.py", line 14, in model_fn 
 
    for row in reader: # read a row as {column1: value1, column2: value2,...} 
 
    File "C:\Users\joe\AppData\Local\Programs\Python\Python35\lib\csv.py", line 109, in __next__ 
 
    self.fieldnames 
 
    File "C:\Users\joe\AppData\Local\Programs\Python\Python35\lib\csv.py", line 96, in fieldnames 
 
    self._fieldnames = next(self.reader) 
 
ValueError: I/O operation on closed file.

を、私はこのエラーを見上げ、あることのようですそれは閉じたファイルを実行するつもりですが、私はそのファイルを開いています。これは、モデルディレクトリとして一時フォルダを使用しているためですか?

答えて

0

model_fnを使用してファイルを開き、ステートメントを使用してファイルを開き、そのファイルでリーダーを作成します。その後、そのリーダーを反復していますが、のはと同じレベルになり、となるため、のため、ファイルがすでに閉じられています。

forループをwithの内側に入れてみてください。

関連する問題