Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Ç¿»¯Ñ§Ï°Óë×Ô¶¯¼ÝÊ»¡ª¡ªCarla»·¾³ÅäÖÃÓëbenchmark½â¶Á
 
×÷ÕßêdzƣºÆôÈËzhr
  3215  次浏览      29
 2021-1-12  
 
±à¼­ÍƼö:
±¾ÎÄÊ×ÏȽéÉÜÁËCarla Server¡¢Carla ClientÒÔ¼°Driving BenchmarkÈý¸ö·½Ã棬ϣÍû±¾ÎĶԴó¼ÒÓаïÖú¡£
±¾ÎÄÀ´×ÔÓÚcsdn£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

1.Carla Server

CarlaĿǰµÄÎȶ¨°æÎª0.8.2 ¼´¿ÉÏÂÔØ£¬linux½âѹºóÃüÁîÐÐÖ´ÐÐ

$ ./CarlaUE4.sh

Õ⽫Æô¶¯Ò»¸öÈ«ÆÁµÄ·ÂÕæ´°¿Ú£¬ÄãÄÜʹÓÃWASD¼ÝÊ»³µÁ¾

ʵÑéÖÐÍùÍùÔö¼Ó¸÷ÖÖ²ÎÊý½øÐÐÅäÖÃ

$ ./CarlaUE4.sh -carla-server -benchmark -fps =10 -windowed -ResX=300 -ResY=300

carla-server²ÎÊý±íʾÒÔ·þÎñ¶ËģʽÔËÐУ¬µÈ´ý¿Í»§¶ËÁ¬½Ó

benchmark fps=10 ±íʾ·ÂÕæÖÐÿһ¸östepµÄʱ¼ä¼ä¸ôÏàͬ

windowed ResX=300 ResY=300 ±íʾ´°¿Ú»¯ÒÔ¼°´óС

1.1 ÎÞ½çÃæÆô¶¯

ÅäÖû·¾³±äÁ¿£ºSDL_VIDEODRIVER=offscreen ºÍ SDL_HINT_CUDA_DEVICE=0

³ÌÐòÖпÉÒÔÕâôд

my_env = {**os.environ, 'SDL_VIDEODRIVER': 'offscreen', 'SDL_HINT_CUDA_DEVICE': '0', }
cmd = [path.join(environ.get('CARLA_ROOT'), 'CarlaUE4.sh'), self.map,
"-benchmark", "-carla-server", "-fps=10", "-world-port{}".format(self.port),
"-windowed -ResX={} -ResY ={}".format (carla_config.server_width, carla_config.server_height), "-carla-no-hud"]
p = subprocess.Popen(cmd, env=my_env)

Õâ¸öĿǰµÄȱµãÊÇĬÈϵÚ0¿éGPU£¬Ñ¡ÔñÆäËûµÄ»áʧЧ£¬ÔÚhttps://github.com/carla-simulator/carla/issues/225 ÓÐÌáµ½

Èç¹ûÄãÏëÄܹ»Ñ¡Ôñgpu£¬¿ÉÒÔÑ¡ÔñÏÂÃæµÄdockerÆô¶¯

1.2 dockerÆô¶¯

¹ØÓÚdockerºÍnvidia dockerµÄ°²×°ÒÔ¼°carla¾µÏñµÄ°²×°¿ÉÒԲο¼¹ÙÍø

ÔÚ³ÌÐòÖÐ

p = subprocess.Popen(['docker', 'run', '--rm', '-d', '-p',
str(self.port) + '-' + str(self.port + 2) + ':' +
str(self.port) + '-' + str(self.port + 2),
'--runtime=nvidia', '-e', 'NVIDIA_VISIBLE_DEVICES='+str(self.gpu),
"carlasim/carla: 0.8.4",
'/bin/bash', 'CarlaUE4.sh', self.map, '-windowed',
'-benchmark', '-fps=10', '-world-port=' + str(self.port)], shell=False, stdout=subprocess.PIPE)

Èç¹ûÄãµÄdockerΪ19.03£¬nvidia-dockerÊÇа棬µ÷ÓÃgpuµÄ·½Ê½ÓÐЩÐí²»Í¬

p = subprocess.Popen (['docker', 'run', '--rm', '-d', '-p',
str(self.port) + '-' + str(self.port + 2) + ':' +
str(self.port) + '-' + str(self.port + 2),
'--gpus='+str(self.gpu), "carlasim/carla:0.8.4",
'/bin/bash', ' CarlaUE4.sh', self.map, '-windowed',
'-benchmark', '-fps=10', '-world-port=' + str(self.port)], shell=False,
stdout= subprocess.PIPE)

dockerÆô¶¯¼´ÊÇÒÔÎÞ½çÃæ·½Ê½Æô¶¯

2.Carla Client

ÔÚÉÏÒ»²½½âѹºóµÄĿ¼ÏÂÓÐÒ»¸öPythonClientĿ¼£¬ÀïÃæ°üº¬Óпͻ§¶ËÁ¬½ÓµÄÑùÀý´úÂëclient_example

µ±ÒÔ·þÎñ¶ËģʽÆô¶¯Carlaºó£¬Ä¬ÈϼàÌý¶Ë¿ÚΪ2000

ÔËÐÐpython client_example.py --autopilot¿ÉÒÔÁ¬½ÓÉÏ·þÎñ¶Ë¿ØÖÆÆû³µ

²ÎÊýautopilot±íʾÆô¶¯ÄÚÖõÄ×Ô¶¯¼ÝÊ»¹¦ÄÜ£¬ÈôûÓÐÕâ¸ö²ÎÊýÔò»áËæ»úÊä³ö¶¯×÷

ÔÚ³ÌÐòÖУ¬ÎÒÃÇÊ×ÏÈÐèÒª¶ÁÈ¡ÅäÖÃÎļþ¡£ÈçExample.CarlaSettings.iniÎļþ

ÈôûÓиø³öÅäÖÃÎļþλÖã¬ÔÚ³ÌÐòÖÐÒ²¿ÉÒÔÉèÖÃÅäÖá£

settings = CarlaSettings()
settings.set(
SynchronousMode=True,
SendNonPlayerAgentsInfo=True,
NumberOfVehicles=20,
NumberOfPedestrians=40,
WeatherId=random.choice([1, 3, 7, 8, 14]),
QualityLevel=args.quality_level)
settings.randomize_seeds()

³ýÁË»ù±¾ÉèÖÃÍ⣬ÎÒÃÇ»¹ÐèÒªÒ»¸öRGB Camera£¬×÷ΪÎÒÃÇÒÔ¼ÝʻԱÊӽǿ´µ½µÄͼÏñ£¬³ÉΪÎÒÃÇѵÁ·Ëã·¨ÖÐÿһ¸östepµÄ״̬ÊäÈëÁ¿¡£

# The default camera captures RGB images of the scene.
camera0 = Camera('CameraRGB')
# Set image resolution in pixels.
camera0.set_image_size (800, 600)
# Set its position relative to the car in meters.
camera0.set_position (0.30, 0, 1.30)
settings.add_sensor(camera0)

½Ó×ÅÎÒÃÇ¿ÉÒÔͨ¹ý¼ÓÔØÉèÖõõ½Ò»¸ö³¡¾°£¬³¡¾°Öаüº¬ÓÐÐí¶àÆðʼµã¿É¹©Ñ¡Ôñ£¨¸ù¾ÝTownµØÍ¼Ñ¡ÔñµÄ²»Í¬¶ø²»Í¬£¬0.8.2°æ±¾ÖÐÓÐTown1ºÍTown2£©

# Now we load these settings into the server. The server replies
# with a scene description containing the available start spots for
# the player. Here we can provide a CarlaSettings object or a
# CarlaSettings.ini file as string.
scene = client.load_settings (settings)
# Choose one player start at random.
number_of_player_starts = len(scene.player_start_spots)
player_start = random.randint (0, max(0, number_of_player_starts - 1))

ͨ¹ýview_start_positions.py½Å±¾ÎÒÃÇ¿ÉÒÔ³¡¾°ÖÐËùÓÐÆðµãµÄ±àºÅºÍλÖÃ

Ñ¡ÔñÒ»¸öÆðµã±àºÅ£¬ ÎÒÃǾͿÉÒÔ¿ªÊ¼ÕâÌËepisode

# Notify the server that we want to start the episode at the
# player_start index. This function blocks until the server is ready
# to start the episode.print ('Starting new episode...')
client.start_episode (player_start)

½ÓÏÂÀ´ÊÇÕâÒ»Ì˵Ľ»»¥¹ý³Ì

for frame in range (0, frames_per_episode):
measurements, sensor_data = client.read_data()
print_measurements (measurements)

# Save the images to disk if requested.
if args.save_images_to_disk:
for name, measurement in sensor_data.items():
filename = args.out_filename_format.format (episode, name, frame) measurement.save_to_disk (filename)

ÔÚÿһ֡ÖУ¬ÎÒÃÇÊ×ÏȶÁȡ״̬Êý¾Ý£¬measurements°üº¬ÓÐÆû³µµÄ¸÷ÖÖ²âÁ¿Êý¾Ý£¬ÓгµÁ¾µÄxy×ø±ê£¬ËÙ¶È£¬ÅöײÊý¾Ý£¨Åöײǿ¶È£¬µ¥Î»kg*m/s£¬°üÀ¨Åöײ³µÁ¾£¬ÐÐÈË£¬ÆäËûÎïÌåÈýÖÖ£©£¬ÅܳöµÀ±ÈÀý

player_measurements = measurements.player_measurements
pos_x= player_measurements.transform.location.x,
pos_y= player_measurements.transform.location.y,
speed= player_measurements.forward_speed * 3.6, # m/s -> km/h

col_cars= player_measurements.collision_vehicles,
col_ped= player_measurements.collision_pedestrians,
col_other= player_measurements.collision_other,

other_lane=100 * player_measurements .intersection _otherlane,#Õ¼ÆäËû³µµÀ°Ù·Ö±È
offroad=100 * player_measurements.intersection _offroad,#ÅܳöµÀ·Íâ°Ù·Ö±È

sensor_dataÊÇÒ»¸ö×ֵ䣬Ϊ¸÷ÖÖ¶¨ÒåµÄ´«¸ÐÆ÷£¬±ÈÈç֮ǰ½¨Á¢µÄRGB Camera£¬ÀïÃæ°üº¬ÓÐͼÏñµÄ¾ØÕóÊý¾Ý£¬È¡³ö·½·¨ÈçÏÂ

rgb_image = sensor_data['CameraRGB'].data

ÔÚ¶ÁÈ¡¹ý״̬Êý¾Ýºó£¬ÎÒÃÇÐèÒª¶Ô³µÁ¾·¢ËÍ¿ØÖÆÖ¸ÁCarlaÖ§³ÖµÄ¿ØÖÆÖ¸ÁîÈçÏÂ

Ö¸Áî

ÀàÐÍ£¬·¶Î§

ÃèÊö

Steer

Float£¬ [-1.0,1.0]

·½ÏòÅ̽ǶÈ

Throttle

Float£¬ [0.0,1.0]

ÓÍÃÅ

Brake

Float£¬ [0.0,1.0]

ɲ³µ

Hand Brake

Bool£¬ True/False

ÊÇ·ñÆô¶¯ÊÖɲ

Reverse

Bool£¬True/False

ÊÇ·ñÒªµ¹µ²

3.Driving Benchmark

ÔÚCoRL2017ÕâÆªÎÄÕÂÀ¸ø³öÁËÒ»¸öʵÑébenchmark£¬ÎÒÃÇ¿ÉÒÔÔÚbenchmarkÉÏÅÜ×Ô¼ºµÄʵÑ飬Ҳ¿ÉÒÔ¶¨ÖÆ×Ô¼ºµÄbenchmark

ÂÛÎÄÖж¨ÒåÁËËÄÖÖÈÎÎñ£¬Æäʵ¶¼ÊôÓÚµ¼º½ÈÎÎñ£¬¼´¸ø¶¨²»Ò»ÑùµÄÆðµãºÍÖÕµã

Ö±ÐУºÆðµãºÍÖյ㴦ÓÚÒ»µÀÖ±ÏßÉÏ£¬ÎÞ¶¯Ì¬ÎïÌ壬ÔÚTown1ÖÐÆ½¾ù¾àÀëΪ200m£¬ÔÚTown2ÖÐÆ½¾ù¾àÀëΪ100m

Ò»´ÎתÍ䣺ÖÕµã¾àÀëÆðµãÐèÒªÒ»¸öתÍ䣬ÎÞ¶¯Ì¬ÎïÌ壬ÔÚTown1ƽ¾ù¾àÀëΪ400m£¬ÔÚTown2ƽ¾ù¾àÀëΪ170m

µ¼º½£ºÆðµãºÍÖÕµãÎÞÌØÊâÏÞÖÆ£¬ÎÞ¶¯Ì¬ÎïÌ壬Town1ƽ¾ù¾àÀëΪ770m£¬Town2ƽ¾ù¾àÀëΪ360m.

¾ßÓж¯Ì¬Õϰ­ÎïµÄµ¼º½£ºÓë֮ǰÈÎÎñÒ»Ö£¬µ«ÊǾßÓж¯Ì¬ÎïÌ壨³µÁ¾»òÐÐÈË£©

ÔÚdriving_benchmark/ experiment_suites/corl_2017.py¸ø³öÁËÏêϸÅäÖÃ

ÎÒÃÇѧ×Åд³ö×Ô¼ºµÄʵÑéÅäÖ㬳ÌÐòÖÐÔòÊǼ̳ÐExperimentSuiteÀࣺ

È·¶¨ÆðµãºÍÖյ㣺

ÀýÈçÎÒÃÇ¿ÉÒÔÑ¡ÔñÆðµãΪ140£¬ÖÕµãΪ134£¬ÔÚview_start_position.py½Å±¾ÖпÉÒÔ¿ÉÊÓ»¯Æä¾ßÌåλÖá£

python view_start_positions.py --pos 140,134 --no-labels

ÀàËÆµÄÎÒÃÇ¿ÉÒÔ¶¨ÒåËĸöÈÎÎñ

# Define the start/end position below as tasks
poses_task0 = [[7, 3]]
poses_task1 = [[138, 17]]
poses_task2 = [[140, 134]]
poses_task3 = [[140, 134]]
# Concatenate all the tasks
poses_tasks = [poses_task0, poses_task1 , poses_task1 , poses_task3]

È·¶¨³µÁ¾ÊýÄ¿ºÍÐÐÈËÊýÄ¿

# Add dynamic objects to tasks
vehicles_tasks = [0, 0, 0, 20]
pedestrians_tasks = [0, 0, 0, 50]

ÅäÖÃʵÑéÀà

experiments_vector = []
# The used weathers is the union between test and train weathers
for weather in used_weathers:
for iteration in range(len(poses_tasks)):
poses = poses_tasks[iteration]
vehicles = vehicles_tasks[iteration]
pedestrians = pedestrians_tasks[iteration]

conditions = CarlaSettings()
conditions.set(
SendNonPlayerAgentsInfo=True,
NumberOfVehicles=vehicles,
NumberOfPedestrians=pedestrians,
WeatherId=weather

)
# Add all the cameras that were set for this experiments
conditions.add_sensor(camera)
experiment = Experiment()
experiment.set(
Conditions=conditions,
Poses=poses,
Task=iteration,
Repetitions=1
)
experiments_vector.append(experiment)

³ýÁË֮ǰµÄÉèÖÃÍ⣬ÎÒÃÇ»¹¿ÉÒÔÅäÖÃÆÀ¼Û±ê×¼£¬Ä¬ÈÏÉèÖÃÈçÏ£º

return {

'intersection_offroad': {'frames_skip': 10,
'frames_recount': 20,
'threshold': 0.3
},
'intersection_otherlane': {'frames_skip': 10,
'frames_recount': 20,
'threshold': 0.4
},
'collision_other': {'frames_skip': 10,
'frames_recount': 20,
'threshold': 400
},
'collision_vehicles': {'frames_skip': 10,
'frames_recount': 30,
'threshold': 400
},
'collision_pedestrians': {'frames_skip': 5,
'frames_recount': 100,
'threshold': 300
},

}

ÀïÃæµÄframe_skip±íʾÁ˼ÆËãÎ¥¹æ²Ù×÷ʱ£¨Åöײ£¬Ô½µÀ£©Ìø¹ýµÄÖ¡Êý£¬µ±Á½Ö¡Î¥¹æÁ¿Ö®²î´óÓÚthresholdÕâ¸ö¶¨ÒåµÄÏÞÖÆÊ±£¬Ôò¼ÇΪһ´ÎÎ¥¹æ²Ù×÷£¬frame_recountÔò¶¨ÒåÁËÌø¹ý¶àÉÙÖ¡ºóÔÙ´ÎÖØÐ¼ÆËãÎ¥¹æ²Ù×÷£¬Ò»°ãÕâЩ±£³ÖĬÈÏÖµ¼´¿É¡£

ÕâЩÅäÖö¼¿ÉÒÔÔÚbasic_experiment_suiteÀà²é¿´

³ýÁËʵÑéÅäÖÃÍ⣬ÎÒÃÇ»¹Òª¶¨Òå×Ô¼ºµÄÖÇÄÜÌ壬ÕâÀïÎÒÃǶ¨ÒåÒ»¸öֻǰ½øµÄÖÇÄÜÌ壬¼´ÓÍÃÅÁ¿ÉèÖÃΪ0.9¡£

class ForwardAgent(Agent):
"""
Simple derivation of Agent Class,
A trivial agent agent that goes straight
"""
def run_step (self, measurements, sensor_data, directions, target):
control = VehicleControl()
control.throttle = 0.9

return control

¶¨ÒåºÃʵÑéÉèÖúÍÖÇÄÜÌåºó£¬Æô¶¯Carla·þÎñÆ÷£¬Ö±½Óµ÷ÓÃdriving_benchmark.pyÖеÄrun_driving_benchmarkº¯Êý¾Í¿ÉÒÔÔËÐÐbenchmarkÁË¡£

Ïêϸ´úÂë¿ÉÒԲο¼benchmark_example.py

ÔËÐÐbenchmark_exampleºó£¬ÎÒÃǻᷢÏÖÔÚµ±Ç°Ä¿Â¼ÏÂÉú³ÉÒ»¸öʵÑé½á¹ûµÄÎļþ¼Ð£¬ÀïÃæ´ó¸Å°üº¬ÕâËĸöÎļþ

µÚÒ»¸ölogÎļþ¼Ç¼ÁËʵÑéµÄ½øÐйý³Ì£¬´ó¸ÅÀàËÆÕâÑùµÄ½á¹û

Start Task 0
Start Poses (7 3 ) on weather 1
Start Task 1
Start Poses (138 17 ) on weather 1
Start Task 2
Start Poses (140 134 ) on weather 1
Start Task 3
Start Poses (140 134 ) on weather 1
====== Finished Entire Benchmark ======

µÚ¶þ¸öÎļþmeasurements.csv¼Ç¼ÁËÿ¸öʵÑéÈÎÎñÿһ֡Æû³µËù´¦µÄxyλÖã¬ÒÔ¼°µ±Ê±µÄ¿ØÖÆÁ¿

µÚËĸöÎļþsummary.csv¼Ç¼ÁËÿ¸öʵÑéÈÎÎñµÄ½á¹û

result=1´ú±í±¾´ÎÈÎÎñ³É¹¦µ½µ×Öյ㣬ÿ´ÎʵÑ鿪ʼ»á¼ÆËãÆðµãÓëÖÕµãµÄ¾àÀ루ŷʽ¾àÀ룩£¬ÊµÑé½áÊøÒ²»á¼ÆËãÒ»´ÎĿǰ¾àÀëÖÕµãµÄ¾àÀë¡£

³ÌÐòÖÐÄÚÖÃÁËÒ»¸öplanner¹æ»®Æ÷£¬ÔÚ¸ø¶¨ÆðµãºÍÖÕµãºó»áÒÔA starËã·¨¹æ»®Ò»Ìõ·¾¶£¬Ä¿µÄÊÇΪÁ˸øÑµÁ·Ê±Ìṩһ¸ö¸ß¼¶Ö¸ÁîÐźÅ(×óת£¬ÓÒת£¬Ö±ÐÐ)£¬Í¬Ê±Ò²»á¼ÆËãÒ»¸ö³¬Ê±Ê±¼ä£¬³¬¹ýÕâ¸öʱ¼äÔòËã×÷ʧ°Ü¡£

µÚÈý¸öÎļþmetric.jsonÎļþÓмÆËã³öµÄ¡¯episodes_completion¡¯£¬ ¡®intersection_offroad¡¯£¬ ¡®intersection_otherlane¡¯£¬ ¡®collision_pedestrians¡¯£¬ ¡®collision_vehicles¡¯£¬ ¡®collision_other¡¯£¬¡®episodes_fully_completed¡¯£¬ ¡®average_speed¡¯£¬ ¡®driven_kilometers¡¯¸÷ÖÖÖ¸±êÖµ¡£

×îÖÕprint³öѵÁ·ºÍ²âÊÔÖи÷ÖÖÖ¸±êÖµ£¬ÀàËÆresult

 

   
3215 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

»ùÓÚͼ¾í»ýÍøÂçµÄͼÉî¶Èѧϰ
×Ô¶¯¼ÝÊ»ÖеÄ3DÄ¿±ê¼ì²â
¹¤Òµ»úÆ÷ÈË¿ØÖÆÏµÍ³¼Ü¹¹½éÉÜ
ÏîĿʵս£ºÈçºÎ¹¹½¨ÖªÊ¶Í¼Æ×
 
Ïà¹ØÎĵµ

5GÈ˹¤ÖÇÄÜÎïÁªÍøµÄµäÐÍÓ¦ÓÃ
Éî¶ÈѧϰÔÚ×Ô¶¯¼ÝÊ»ÖеÄÓ¦ÓÃ
ͼÉñ¾­ÍøÂçÔÚ½»²æÑ§¿ÆÁìÓòµÄÓ¦ÓÃÑо¿
ÎÞÈË»úϵͳԭÀí
Ïà¹Ø¿Î³Ì

È˹¤ÖÇÄÜ¡¢»úÆ÷ѧϰ&TensorFlow
»úÆ÷ÈËÈí¼þ¿ª·¢¼¼Êõ
È˹¤ÖÇÄÜ£¬»úÆ÷ѧϰºÍÉî¶Èѧϰ
ͼÏñ´¦ÀíËã·¨·½·¨Óëʵ¼ù
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]
 
×îÐÂÎÄÕÂ
¶àÄ¿±ê¸ú×Ù£ºAI²úÆ·¾­ÀíÐèÒªÁ˽âµÄCVͨʶ
Éî¶Èѧϰ¼Ü¹¹
¾í»ýÉñ¾­ÍøÂç֮ǰÏò´«²¥Ëã·¨
´Ó0µ½1´î½¨AIÖÐ̨
¹¤Òµ»úÆ÷ÈË¿ØÖÆÏµÍ³¼Ü¹¹½éÉÜ
×îпγÌ
È˹¤ÖÇÄÜ£¬»úÆ÷ѧϰºÍÉî¶Èѧϰ
È˹¤ÖÇÄÜÓë»úÆ÷ѧϰӦÓÃʵս
È˹¤ÖÇÄÜ-ͼÏñ´¦ÀíºÍʶ±ð
È˹¤ÖÇÄÜ¡¢»úÆ÷ѧϰ& TensorFlow+Keras¿ò¼Üʵ¼ù
È˹¤ÖÇÄÜ+Python£«´óÊý¾Ý
³É¹¦°¸Àý
ij×ÛºÏÐÔ¿ÆÑлú¹¹ È˹¤ÖÇÄÜÓë»úÆ÷ѧϰӦÓÃ
Ä³ÒøÐÐ È˹¤ÖÇÄÜ+Python+´óÊý¾Ý
±±¾© È˹¤ÖÇÄÜ¡¢»úÆ÷ѧϰ& TensorFlow¿ò¼Üʵ¼ù
ijÁìÏÈÊý×ÖµØÍ¼ÌṩÉÌ PythonÊý¾Ý·ÖÎöÓë»úÆ÷ѧϰ
ÖйúÒÆ¶¯ È˹¤ÖÇÄÜ¡¢»úÆ÷ѧϰºÍÉî¶Èѧϰ